#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/xmlreader.h>
int main() {
// 初始化库
LIBXML_TEST_VERSION
// 打开文件
xmlTextReaderPtr reader = xmlReaderForFile("example.xml", NULL, 0);
if (reader == NULL) {
fprintf(stderr, "Error: unable to parse file \"example.xml\"\n");
return -1;
}
// 读取并处理每个节点
int ret = 1;
while (ret == 1) {
ret = xmlTextReaderRead(reader);
if (ret == 1) {
// 获取节点类型
xmlNodeType nodeType = xmlTextReaderNodeType(reader);
switch (nodeType) {
case XML_READER_TYPE_ELEMENT:
// 处理元素节点
const xmlChar *name = xmlTextReaderConstName(reader);
printf("Element: %s\n", name);
break;
case XML_READER_TYPE_TEXT:
// 处理文本节点
const xmlChar *content = xmlTextReaderConstValue(reader);
printf("Text: %s\n", content);
break;
// 可以根据需要添加更多节点类型的处理
default:
break;
}
} else if (ret == 0) {
// 文件结束
printf("End of file.\n");
} else {
// 错误处理
const char *error_msg = xmlTextReaderConstErrorMsg(reader);
fprintf(stderr, "Error: %s\n", error_msg);
xmlFreeTextReader(reader);
return -1;
}
}
// 清理
xmlFreeTextReader(reader);
xmlCleanupParser();
return 0;
}
这段代码展示了如何使用`xmlTextReader`对象来读取和处理XML文档。它首先尝试打开名为"example.xml"的文件,并创建一个`xmlTextReaderPtr`类型的读取器。然后,它进入一个循环,使用`xmlTextReaderRead`函数逐个读取节点,并根据节点类型(如元素或文本)进行相应的处理。如果读取过程中遇到错误,它会打印错误信息并退出。最后,它清理了读取器和XML库。
请注意,为了编译这段代码,您需要链接libxml2库。在GCC中,您可以使用类似`-lxml2`的链接器选项。此外,确保您的系统已安装libxml2库和相应的头文件。