作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
xml文件:
<top>
<name>hanhao</name>
<age>18</age>
<!--
node name : name
node value : hanhao
node name : age
node value : 18
-->
</top>
我的cpp文件:
#include<iostream>
#include"rapidxml/rapidxml.hpp"
#include"rapidxml/rapidxml_print.hpp"
#include"rapidxml/rapidxml_utils.hpp"
using namespace std;
using namespace rapidxml;
void handlenode(xml_node<> *node){
for(node = node -> first_node(); node != NULL; node = node -> next_sibling()){
cout<<node -> name() <<" 's value is : "<<node->value() <<endl;
handlenode(node);
}
}
int main(){
char xmldoc[] = "demo.xml";
file<> file(xmldoc);
xml_document<> doc;
doc.parse<parse_comment_nodes>(file.data());
xml_node<> *node = doc.first_node();
handlenode(node);
doc.allocate_node(node_element,"",node->value());
return 0;
}
预期的输出是:
name 的值为:hanhao
age 的值为:18
但实际输出是:
name 的值为:hanhao
的值为:hanhao
age 的值为:18
的值为:18
的值为:
节点名称:名称
节点值:hanhao
节点名称:年龄
节点值:18
谁能告诉我为什么会出现这个问题?
最佳答案
问题是:每个节点都有其类型,并且您正在处理每一种节点(包括末尾的注释)。看起来您只想处理 node_element,所以:
void handlenode(xml_node<> *node){
for(node = node -> first_node(); node != NULL; node = node -> next_sibling()){
if(node->type() == node_element) //chek node type
{
cout<<node -> name() <<" 's value is : "<<node->value() << endl;
handlenode(node);
}
}
}
这应该会产生预期的输出。
关于c++ - Rapidxml遍历节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47173955/
我是一名优秀的程序员,十分优秀!