可以使用 libxml2 提供的函数 xmlTextWriterWriteRaw() 来保留文档中标签闭合方式,并打印 xml 文件内容到屏幕上。具体步骤如下:

  1. 使用 xmlReadFile() 函数读取 xml 文件,并获取 xml 文档根节点。

  2. 创建 xmlTextWriter 对象,并使用 xmlTextWriterStartDocument() 函数开始写入 xml 文档。

  3. 使用 xmlTextWriterWriteRaw() 函数将 xml 文档根节点写入 xml 文件。

  4. 使用 xmlTextWriterEndDocument() 函数结束 xml 文档写入。

  5. 使用 xmlFreeTextWriter() 函数释放 xmlTextWriter 对象。

  6. 使用 xmlFreeDoc() 函数释放 xml 文档对象。

下面是示例代码:

#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/xmlwriter.h>

int main()
{
    xmlDocPtr doc;
    xmlNodePtr root;
    xmlTextWriterPtr writer;
    int rc;

    // 读取 xml 文件,获取 xml 文档根节点
    doc = xmlReadFile("example.xml", NULL, 0);
    if (doc == NULL) {
        printf("Failed to parse document\n");
        return -1;
    }
    root = xmlDocGetRootElement(doc);

    // 创建 xmlTextWriter 对象
    writer = xmlNewTextWriterFilename("output.xml", 0);
    if (writer == NULL) {
        printf("Failed to create xml writer\n");
        return -1;
    }

    // 开始写入 xml 文档
    rc = xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL);
    if (rc < 0) {
        printf("Failed to start document\n");
        return -1;
    }

    // 写入 xml 文档根节点
    rc = xmlTextWriterWriteRaw(writer, (const xmlChar *)xmlNodeToString(root));
    if (rc < 0) {
        printf("Failed to write root node\n");
        return -1;
    }

    // 结束 xml 文档写入
    rc = xmlTextWriterEndDocument(writer);
    if (rc < 0) {
        printf("Failed to end document\n");
        return -1;
    }

    // 释放 xmlTextWriter 对象
    xmlFreeTextWriter(writer);

    // 释放 xml 文档对象
    xmlFreeDoc(doc);

    return 0;
}
Windows 下使用 libxml2 保留 XML 标签闭合方式并打印内容

原文地址: https://www.cveoy.top/t/topic/n3rd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录