
测试环境:
vs2019
测试代码:
#include <iostream>
#include <string>
#include <libxml/parser.h>
#include <libxml/tree.h>
// 创建简单的XML文档
void createXmlDocument() {
    // 创建新文档和根节点
    xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0");
    xmlNodePtr root = xmlNewNode(NULL, BAD_CAST "root");
    xmlDocSetRootElement(doc, root);
    // 添加子节点
    xmlNewChild(root, NULL, BAD_CAST "person", NULL);
    xmlNodePtr person = xmlNewChild(root, NULL, BAD_CAST "person", NULL);
    xmlNewProp(person, BAD_CAST "id", BAD_CAST "1");
    // 添加带内容的子节点
    xmlNewChild(person, NULL, BAD_CAST "name", BAD_CAST "John Doe");
    xmlNewChild(person, NULL, BAD_CAST "age", BAD_CAST "30");
    xmlNewChild(person, NULL, BAD_CAST "email", BAD_CAST "john@example.com");
    // 保存到文件
    xmlSaveFormatFileEnc("test.xml", doc, "UTF-8", 1);
    // 释放资源
    xmlFreeDoc(doc);
    std::cout << "XML文档创建成功: test.xml\n";
}
// 解析XML文档
void parseXmlDocument(const char* filename) {
    // 解析XML文件
    xmlDocPtr doc = xmlReadFile(filename, NULL, 0);
    if (doc == NULL) {
        std::cerr << "无法解析XML文件: " << filename << std::endl;
        return;
    }
    // 获取根节点
    xmlNodePtr root = xmlDocGetRootElement(doc);
    if (root == NULL) {
        std::cerr << "空XML文档\n";
        xmlFreeDoc(doc);
        return;
    }
    std::cout << "\n解析XML文档: " << filename << "\n";
    std::cout << "根节点: " << root->name << "\n";
    // 遍历子节点
    for (xmlNodePtr node = root->children; node != NULL; node = node->next) {
        if (node->type == XML_ELEMENT_NODE) {
            std::cout << "\n节点: " << node->name;
            // 打印属性
            for (xmlAttrPtr attr = node->properties; attr != NULL; attr = attr->next) {
                std::cout << " | 属性: " << attr->name << "="
                    << xmlGetProp(node, attr->name);
            }
            // 打印子节点内容
            for (xmlNodePtr child = node->children; child != NULL; child = child->next) {
                if (child->type == XML_TEXT_NODE && child->content != NULL) {
                    std::cout << "\n  " << child->parent->name << ": " << child->content;
                }
            }
        }
    }
    // 释放资源
    xmlFreeDoc(doc);
}
int main() {
    // 初始化libxml2库
    xmlInitParser();
    LIBXML_TEST_VERSION
        // 创建XML文档
        createXmlDocument();
    // 解析刚创建的XML文档
    parseXmlDocument("test.xml");
    // 清理libxml2
    xmlCleanupParser();
    return 0;
}测试结果截图:
