test.cpp:
/*g++ -o test test.cpp -I../tinyxml2 -Wl,--rpath -Wl,/usr/local/lib /usr/local/lib/libtinyxml2.so*/
#include<stdio.h>
#include<string>
#include<iostream>
#include "tinyxml2.h"
using namespace std;
using namespace tinyxml2;
void show_all_node(XMLElement *tmpnode)
{
while(tmpnode)
{
cout<<"<"<<tmpnode->Name()<<">";
const XMLAttribute* tmp_attr = tmpnode->FirstAttribute();//获取节点属性第一个
while(tmp_attr) //遍历整个属性列表
{
cout<<"attr="<<tmp_attr->Name()<<":"<<tmp_attr->Value()<<",";
tmp_attr=tmp_attr->Next();//获取下一个属性节点
}
if(tmpnode->GetText())//一定要判断不然会有问题,如果文本为空的话,会打印text=后直接结束进程
cout<<" text="<<tmpnode->GetText()<<";"<<endl;
show_all_node(tmpnode->FirstChildElement());//递归调用,打印子节点所有属性和文本信息
tmpnode=tmpnode->NextSiblingElement();//获取同级别的下一个兄弟元素
}
}
int main()
{
XMLDocument doc;
doc.LoadFile("./dream.xml");//加载文档
XMLElement*root=doc.RootElement();//获取根元素,通过XMLDocument来获取
cout<<root->Name()<<endl;
XMLDeclaration *decl;//获取声明不能直接doc->ToDeclaration();
decl=doc.FirstChild()->ToDeclaration();//不能使用doc.FirstChildElement()->ToDeclaration();
if(decl!=NULL)
{
cout<< decl->Value()<<endl;
}
show_all_node(root);//遍历root节点下的所有节点
// doc.Print();//打印整个文档内容*/
doc.Clear();
return 0;
}
dream.xml:
<?xml version="1.0"?>
<!-- 注释节点-->
<PLAY>
<SPEECH>
<SPEAKER id="1" name="speakattr">text node</SPEAKER>
<LINE>What, dead, my dove?</LINE>
<LINE>Speak, speak. Quite dumb?</LINE>
</SPEECH>
<SPEECH2>
<SPEAKER id="2" name="speaker2">PUCK</SPEAKER>
<LINE>So, good night unto you all.</LINE>
</SPEECH2>
</PLAY>