用C++语言写读取XML根节点、节点和节点属性值的代码
时间: 2024-05-01 10:21:44 浏览: 204
可以使用libxml2库来读取XML根节点、节点和节点属性值。以下是一个简单的示例代码:
```c
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <stdio.h>
int main() {
xmlDocPtr doc;
xmlNodePtr root, node;
xmlChar *attr_value;
// 打开XML文件
doc = xmlReadFile("example.xml", NULL, 0);
if (doc == NULL) {
fprintf(stderr, "Failed to parse XML file.\n");
return 1;
}
// 获取根节点
root = xmlDocGetRootElement(doc);
if (root == NULL) {
fprintf(stderr, "Empty XML document.\n");
xmlFreeDoc(doc);
return 1;
}
// 遍历子节点
for (node = root->children; node != NULL; node = node->next) {
// 获取节点名称和属性值
printf("Node: %s\n", node->name);
attr_value = xmlGetProp(node, (const xmlChar *)"attr");
if (attr_value != NULL) {
printf("Attribute: %s\n", attr_value);
xmlFree(attr_value);
}
}
// 释放资源
xmlFreeDoc(doc);
xmlCleanupParser();
return 0;
}
```
在这个示例中,我们首先使用`xmlReadFile()`函数打开XML文件并得到一个`xmlDocPtr`类型的指针。然后,使用`xmlDocGetRootElement()`函数获取根节点的指针。接着,我们遍历根节点的所有子节点,并使用`xmlGetProp()`函数获取节点的`attr`属性值。
需要注意的是,我们需要在程序末尾调用`xmlFreeDoc()`和`xmlCleanupParser()`函数来释放资源。
以上只是一个简单的示例,libxml2库还提供了更多的API来处理XML文件。
阅读全文