递归解析xml

shiter
人工智能领域优质创作者
博客专家认证
2015-05-18 11:09:29
解析库用的tinyxml2:

http://grinninglizard.com/tinyxml2docs/index.html

如何使用上述库解析xml,得到question每个标签中的,label标签的内容,递归解析应该怎么写啊



<?xml version="1.0" encoding="utf-8"?>
<Questions Project="simple_survey" Context="Question" >
<Question QuestionFullName="Respondent" QuestionType="Block" IsSystem="true">
<Label>Variables reserved for respondent identification</Label>
<Question QuestionName="Serial" QuestionFullName="Respondent.Serial" IsSystem="true" >
<Label>Serial number</Label>

<HelperFields>
<Question QuestionName="SourceFile" QuestionFullName="Respondent.Serial.SourceFile" IsSystem="true" >
<Label>What source file (for example, TIFF) can be used to get the respondent's serial number?</Label>
</Question>
</HelperFields>
</Question>
</Questions>


这个是另外一个帖子:
http://bbs.csdn.net/topics/391036566?page=1#post-399224657
...全文
373 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiter 2015-05-26
  • 打赏
  • 举报
回复
引用 5 楼 fly_dragon_fly 的回复:
[quote=引用 4 楼 wangyaninglm 的回复:] [quote=引用 1 楼 fly_dragon_fly 的回复:] 这个库没用过,看了一下是DOM模型,直接DFS试试
void access(XMLNode *que){
     if(!que->FirstChild()) return;
    XMLNode *child =que->FirstChild();
    while(child){
         if(!strncmp(child->Value(),"Label",5)) /* 要处理的label 内容*/
         else access(child);
         child =child->NextSibling();
    }
}
问下,如果不用递归应该怎么搞?[/quote] 为什么不用递归,你的节点有多深? 可以使用stack来模拟递归吧[/quote] 有节点嵌套定义,完后每一层还要解析兄弟节点的东西,用递归代码不是很清晰
fly_dragon_fly 2015-05-26
  • 打赏
  • 举报
回复
引用 4 楼 wangyaninglm 的回复:
[quote=引用 1 楼 fly_dragon_fly 的回复:] 这个库没用过,看了一下是DOM模型,直接DFS试试
void access(XMLNode *que){
     if(!que->FirstChild()) return;
    XMLNode *child =que->FirstChild();
    while(child){
         if(!strncmp(child->Value(),"Label",5)) /* 要处理的label 内容*/
         else access(child);
         child =child->NextSibling();
    }
}
问下,如果不用递归应该怎么搞?[/quote] 为什么不用递归,你的节点有多深? 可以使用stack来模拟递归吧
shiter 2015-05-25
  • 打赏
  • 举报
回复
引用 1 楼 fly_dragon_fly 的回复:
这个库没用过,看了一下是DOM模型,直接DFS试试
void access(XMLNode *que){
     if(!que->FirstChild()) return;
    XMLNode *child =que->FirstChild();
    while(child){
         if(!strncmp(child->Value(),"Label",5)) /* 要处理的label 内容*/
         else access(child);
         child =child->NextSibling();
    }
}
问下,如果不用递归应该怎么搞?
spaceman10 2015-05-18
  • 打赏
  • 举报
回复
递归就是要每个节点遍历的啊
shiter 2015-05-18
  • 打赏
  • 举报
回复
引用 1 楼 fly_dragon_fly 的回复:
这个库没用过,看了一下是DOM模型,直接DFS试试
void access(XMLNode *que){
     if(!que->FirstChild()) return;
    XMLNode *child =que->FirstChild();
    while(child){
         if(!strncmp(child->Value(),"Label",5)) /* 要处理的label 内容*/
         else access(child);
         child =child->NextSibling();
    }
}
大牛我发现这个dfs,对于每一个子节点都要调用一次啊,这个到是最深的label也能访问到
fly_dragon_fly 2015-05-18
  • 打赏
  • 举报
回复
这个库没用过,看了一下是DOM模型,直接DFS试试
void access(XMLNode *que){
     if(!que->FirstChild()) return;
    XMLNode *child =que->FirstChild();
    while(child){
         if(!strncmp(child->Value(),"Label",5)) /* 要处理的label 内容*/
         else access(child);
         child =child->NextSibling();
    }
}

64,659

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧