tinyxml2遍历所有节点_C++如何遍历xml文档

XML文档我想很多编程的小伙伴都知道吧,这个在json出来之前一直是数据交换领域的首选,只是随着时代的发展,xml逐渐不再流行了,但是xml还是在数据领域有十分庞大的占有率。小编就碰到在工厂中用xml形式存储机台加工参数。那么,如果我们想要针对这些xml数据进行开发,就必须要先会遍历它,将之所有数据取出来。

接下来我们就一起来看下C++如何遍历xml吧。其实这种标签型语言都存在遍历的思路都是一样的,只是用的语言不同而已,像html可能大部分用的就是js吧!

首先给大家看一下我自己写的简单的xml文档

26f4a77f508e47a2946fed8e2aa89eb2

下面是xml代码

i am a boyit nike'classMatea am a girlit lucy'classMate

首先看下这个文档能不能用

#include #include #include "tinyxml2.h"//这里我用的是tinyxml2库,在网上下载的,有需要的可以私信我using namespace std;int main(){tinyxml2::XMLDocument doc ;int result = doc.LoadFile("test.xml");if(result == tinyxml2::XML_SUCCESS){cout<

运行代码

0f3f0a3c8b1b4ef8a08d9b01ef09ee18

OK,没问题,接下来开干,先貼截圖

52b48d7d326b43a68fe5e60c82fb843e
f6d9569da2264aec80e0c82118778493

下面是原代碼

#include #include #include "tinyxml2.h"using namespace std;void xmlReaderFunc(tinyxml2::XMLElement* node){//这一行代码是没有用的,在这里是为了给大家输出节点名称让大家更清楚的知道他的逻辑if (node != NULL)cout<Name()<FirstChildElement()==NULL){xmlReaderFunc(NULL);}else if (node->FirstChildElement()!=NULL){//获得当前节点的第一个子节点tinyxml2::XMLElement* child_node = node->FirstChildElement();xmlReaderFunc(child_node);//获取当前节点的第一个子节点的下一个兄弟节点child_node = child_node->NextSiblingElement();while (child_node != NULL){xmlReaderFunc(child_node);child_node = child_node->NextSiblingElement();}xmlReaderFunc(NULL);}}int main(){tinyxml2::XMLDocument doc ;int result = doc.LoadFile("test.xml");if(result == tinyxml2::XML_SUCCESS){//cout<

然后看一下运行结果:

24e884923eab48d9afdcf97b56ad72ba

这个是用到了一个递归的思想,递归思想主要有两个点:1、前一个与后一个的关系。2、终结条件。

大家看输出的标签名再结合代码就能知道是怎么一个遍历过程了。

其实很简单,就是它在每次调用xmlReaderFunc方法的时候都会将这个节点的子第一个子节点先全部遍历完然后再去遍历跟他同级的兄弟节点,这样循环去调用,直至找到的节点为空就结束。

我再将xml更改一下,各位再看一下输出结果应该就更清楚了

i am a boyi am a grandSonit nike'classMatea am a girli am a granddaughterit lucy'classMate

我这边在child节点下面新增了grandSon 和granddaughter 两个节点,我们看一下输出结果:

ec3064cbb45248f7926ebe9fcc037525

这样是不是对整个遍历的过程更加清楚了呢?

如果大家有需要tinyxml2库的或者不懂得可以私信我,然后后期我会继续更新tinyxml2库的一些其他用法,还有更新的json库的用法,谢谢大家~~~~

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值