c++实现xml解析器树状打印
时间: 2023-08-19 22:04:09 浏览: 111
要实现XML解析器树状打印,可以使用C++中的pugixml库。以下是一个简单的示例代码:
```c++
#include "pugixml.hpp"
#include <iostream>
void print_node(pugi::xml_node node, int depth) {
for (int i = 0; i < depth; i++) {
std::cout << " "; // 打印缩进
}
std::cout << "+ " << node.name() << std::endl; // 打印节点名称
for (pugi::xml_attribute attr : node.attributes()) {
for (int i = 0; i <= depth; i++) {
std::cout << " "; // 打印缩进
}
std::cout << "- " << attr.name() << " = \"" << attr.value() << "\"" << std::endl; // 打印属性名和属性值
}
for (pugi::xml_node child : node.children()) {
print_node(child, depth + 1); // 递归打印子节点
}
}
int main() {
pugi::xml_document doc;
doc.load_file("example.xml"); // 加载XML文件
print_node(doc.first_child(), 0); // 打印根节点
return 0;
}
```
上述代码中,我们首先使用`pugixml`库加载XML文件,然后递归遍历XML树的每个节点,并打印节点名称、属性和子节点。在打印过程中,我们使用缩进来表示节点之间的嵌套关系。运行上述代码后,可以得到类似下面的输出:
```
+ example
- version = "1.0"
+ greeting
- to = "Alice"
- from = "Bob"
Hello, Alice!
+ message
- subject = "Hello"
- date = "2021-06-01"
Hi Alice, how are you doing?
```
这里我们假设XML文件名为`example.xml`,并且文件内容如下:
```xml
<?xml version="1.0"?>
<example version="1.0">
<greeting to="Alice" from="Bob">
Hello, Alice!
</greeting>
<message subject="Hello" date="2021-06-01">
Hi Alice, how are you doing?
</message>
</example>
```
可以看到,上述代码成功地将XML文件解析成了树状结构,并打印了每个节点的信息。