首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[C++]libxml2安装后测试代码

[C++]libxml2安装后测试代码

作者头像
云未归来
发布2025-07-22 15:12:02
发布2025-07-22 15:12:02
15300
代码可运行
举报
运行总次数:0
代码可运行

测试环境:

vs2019

测试代码:

代码语言:javascript
代码运行次数:0
运行
复制
#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;
}

测试结果截图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档