首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rapidxml遍历节点

Rapidxml遍历节点
EN

Stack Overflow用户
提问于 2017-11-08 07:32:09
回答 1查看 1.1K关注 0票数 1

xml文件:

代码语言:javascript
复制
<top>
    <name>hanhao</name>
    <age>18</age>
<!--
    node name : name
    node value : hanhao

    node name : age
    node value : 18
-->
</top>

我的cpp文件:

代码语言:javascript
复制
#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;
}

预期产出如下:

名称的值是: hanhao

年龄值为: 18

但实际产出是:

名称的值是: hanhao

的价值是:韩豪

年龄值为: 18

的值是: 18

的价值是:

节点名:名称

节点值: hanhao

节点名:年龄

节点值: 18

谁能告诉我为什么会出现这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-08 08:23:33

问题是:每个节点都有其类型,您正在处理每种节点(包括末尾的注释)。看起来您只想处理node_element,所以:

代码语言:javascript
复制
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);
      }
    }
}

这将产生预期的产出。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47173955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档