tinyxml2递归遍历xml文件

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>

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值