Windows 下 Libxml2 保留 XML 标签闭合方式并打印到内存
在 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 文档。
原文地址: https://www.cveoy.top/t/topic/n3rn 著作权归作者所有。请勿转载和采集!