在 Windows 下使用 Libxml2 库处理 XML 文档时,有时需要保留文档中标签的闭合方式,例如给定路径 path 的 XML 文档中存在 <SpecificInformation/><SpecMod></SpecMod> 两种闭合方式。可以使用 libxml2 库中的 xmlSaveFormatFileTo 函数来保存 XML 文档,并指定 XML_SAVE_FORMAT 属性来保留标签的闭合方式。

具体代码如下:

#include <libxml/parser.h>
#include <libxml/xmlsave.h>

int main()
{
    const char* path = "example.xml";
    xmlDocPtr doc = xmlReadFile(path, NULL, 0);
    if (!doc) {
        printf("Failed to read xml file\n");
        return -1;
    }

    xmlSaveCtxtPtr saveCtx = xmlSaveToBuffer(NULL, NULL, XML_SAVE_FORMAT);
    xmlSaveDoc(saveCtx, doc);
    xmlSaveFlush(saveCtx);

    xmlChar* buf = saveCtx->buf;
    printf("%s", buf);

    xmlFree(buf);
    xmlSaveClose(saveCtx);
    xmlFreeDoc(doc);

    return 0;
}

其中,xmlSaveToBuffer 函数创建一个 xmlSaveCtxtPtr 类型的保存上下文,使用 XML_SAVE_FORMAT 属性来保留标签的闭合方式。xmlSaveDoc 将 XML 文档保存到上下文中,xmlSaveFlush 将保存的内容刷新到内存缓冲区中。最后,从上下文中获取缓冲区指针,并打印缓冲区内容。最后需要释放缓冲区和保存上下文,以及 XML 文档。

Windows 下 Libxml2 保留 XML 标签闭合方式并打印到内存

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

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