Libxml2 保留 XML 文档标签闭合方式 - Windows 平台示例
在使用 libxml2 库解析 XML 文档时,可以通过设置 xmlSaveOption 来保留文档中标签的闭合方式。具体的步骤如下:
-
使用
xmlReadFile函数读取 XML 文档并解析成 DOM 树结构。 -
创建一个
xmlOutputBuffer对象,用于将解析后的 XML 文档内容输出到屏幕上。 -
使用
xmlSaveToBuffer函数将 DOM 树输出到xmlOutputBuffer对象中,同时设置xmlSaveOption为XML_SAVE_NO_EMPTY,表示保留文档中标签的闭合方式。 -
使用
xmlOutputBufferFlush函数将xmlOutputBuffer对象中的内容输出到屏幕上。
下面是示例代码:
#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/xmlsave.h>
int main(int argc, char **argv) {
xmlDocPtr doc;
xmlOutputBufferPtr buf;
xmlSaveCtxtPtr savectx;
int bufsize;
char *buffer;
// 读取xml文档并解析成DOM树结构
doc = xmlReadFile('example.xml', NULL, 0);
if (doc == NULL) {
fprintf(stderr, 'Failed to parse document\n');
return 1;
}
// 创建xmlOutputBuffer对象
bufsize = 4096;
buffer = malloc(bufsize);
buf = xmlOutputBufferCreateBuffer(buffer, bufsize, NULL);
if (buf == NULL) {
fprintf(stderr, 'Failed to create output buffer\n');
return 1;
}
// 创建xmlSaveCtxt对象,并设置xmlSaveOption为XML_SAVE_NO_EMPTY
savectx = xmlSaveToBuffer(buf, 'UTF-8', XML_SAVE_NO_EMPTY);
if (savectx == NULL) {
fprintf(stderr, 'Failed to create save context\n');
return 1;
}
// 将DOM树输出到xmlOutputBuffer对象中
xmlSaveDoc(savectx, doc);
xmlSaveClose(savectx);
// 输出xmlOutputBuffer对象中的内容到屏幕上
xmlOutputBufferFlush(buf);
printf('%s', buffer);
// 释放资源
xmlFreeDoc(doc);
xmlOutputBufferClose(buf);
free(buffer);
return 0;
}
假设 example.xml 文件内容如下:
<root>
<SpecificInformation/>
<SpecMod></SpecMod>
</root>
执行以上代码后,会在屏幕上输出以下内容:
<?xml version='1.0' encoding='UTF-8'?>
<root>
<SpecificInformation/>
<SpecMod></SpecMod>
</root>
原文地址: https://www.cveoy.top/t/topic/n3qc 著作权归作者所有。请勿转载和采集!