接下来我们就一起来看下C++如何遍历xml吧。实在这种标签型措辞都存在遍历的思路都是一样的,只是用的措辞不同而已,像html可能大部分用的便是js吧!
首先给大家看一下我自己写的大略的xml文档
下面是xml代码

<people> <man name=\"大众jordan\"大众> <child name=\"大众nike\公众>i am a boy<child> <classMate>it nike'classMate<classMate> </man> <woman name=\公众lily\"大众> <child name=\公众lucy\公众>a am a girl<child> <classMate>it lucy'classMate<classMate> </woman></people>
首先看下这个文档能不能用
#include <stdio.h>#include <iostream>#include \"大众tinyxml2.h\公众//这里我用的是tinyxml2库,在网高下载的,有须要的可以私信我using namespace std;int main(){tinyxml2::XMLDocument doc ;int result = doc.LoadFile(\公众test.xml\公众);if(result == tinyxml2::XML_SUCCESS){cout<<\"大众load success\"大众<<endl;}system(\"大众pause\公众);}
运行代码
OK,没问题,接下来开干,先貼截圖
下面是原代碼
#include <stdio.h>#include <iostream>#include \"大众tinyxml2.h\公众using namespace std;void xmlReaderFunc(tinyxml2::XMLElement node){//这一行代码是没有用的,在这里是为了给大家输出节点名称让大家更清楚的知道他的逻辑if (node != NULL)cout<<node->Name()<<endl;//递归结束条件if (node == NULL){;//cout<<\公众node null\公众<<endl;}else if (node->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<<\"大众load success\"大众<<endl;}//获取到根节点tinyxml2::XMLElement root_element = doc.RootElement();//将根节点传入函数开始遍历xmlReaderFunc(root_element);system(\公众pause\"大众);}
然后看一下运行结果:
这个是用到了一个递归的思想,递归思想紧张有两个点:1、前一个与后一个的关系。2、闭幕条件。
大家看输出的标署名再结合代码就能知道是怎么一个遍历过程了。
实在很大略,便是它在每次调用xmlReaderFunc方法的时候都会将这个节点的子第一个子节点先全部遍历完然后再去遍历跟他同级的兄弟节点,这样循环去调用,直至找到的节点为空就结束。
我再将xml变动一下,各位再看一下输出结果该当就更清楚了
<people> <man name=\"大众jordan\公众> <child name=\"大众nike\"大众>i am a boy</child> <grandSon name=\"大众addidas\公众>i am a grandSon</grandSon> <classMate>it nike'classMate</classMate> </man> <woman name=\"大众lily\公众> <child name=\"大众lucy\"大众>a am a girl</child> <granddaughter name=\公众kaka\"大众>i am a granddaughter</granddaughter> <classMate>it lucy'classMate</classMate> </woman></people>
我这边在child节点下面新增了grandSon 和granddaughter 两个节点,我们看一下输出结果:
这样是不是对全体遍历的过程更加清楚了呢?
如果大家有须要tinyxml2库的或者不睬解可以私信我,然后后期我会连续更新tinyxml2库的一些其他用法,还有更新的json库的用法,感激大家~~~~