用TinyXML读写XML

       TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器, 用来读写配置文件是最好的,可从http://www.grinninglizard.com/tinyxml/index.html这里下载。构建TinyXML 时可以选择是否支持STL, 一般建议选择支持STL。TinyXml的源码包里提供了VC6的工程文件,直接用它就可以生成静态库。然后把tinyxml.h, tinystr.h和lib拷到你工程下, 就可以用了。要注意的是, 如果需要STL支持,在你的工程里要定义一个宏TIXML_USE_STL, 然后把下面代码添加到你的代码里, 这段是摘自TinyXML自带的例子。

     我参考了网上的有关TinyXML的文章, 写了一个读写XML的例子,代码如下:

 

#include  " tinyxml.h "

#ifdef TIXML_USE_STL
#include 
< iostream >
#include 
< sstream >
using   namespace  std;
#else
#include 
< stdio.h >
#endif

#if  defined( WIN32 ) && defined( TUNE )
#include 
< crtdbg.h >
_CrtMemState startMemState;
_CrtMemState endMemState;
#endif

#pragma  comment(lib, "tinyxmld_STL.lib")


int  WriteXML() ;
int  ReadXML() ;
// 读取内存里的一段XML
int  ReadXML2() ;

int  main( int  argc,  char   * argv[])
...{
    cout 
<<   " 开始测试! "   << endl;
    
    WriteXML() ;
    ReadXML() ;
    ReadXML2() ;
    cout 
<<   " 结束测试! "   <<  endl ;
    
    
return   0 ;
}

int  WriteXML()
...{
    TiXmlDocument xmlDoc( 
" test.xml "  );  //  建立一个XML文件
    
    TiXmlDeclaration Declaration( 
" 1.0 " , " gb2312 " " yes "  );  //  声明XML的属性
    
    xmlDoc.InsertEndChild( Declaration ); 
//  写入基本的XML头结构    
    
    TiXmlNode 
*  pNode  =  NULL; 
    TiXmlElement
*  pRootElm  =  NULL; 
    TiXmlElement
*  pChildeElm  =  NULL; 
    TiXmlElement
*  pItemElm  =  NULL; 
    TiXmlText
*  pText  =  NULL;  //  一个指向Text的指针
    pText  =   new  TiXmlText( " good " ) ;
    
    pRootElm 
=   new  TiXmlElement(  " todo "  ); 
    
    pNode 
=  xmlDoc.InsertEndChild( * pRootElm) ;
    pRootElm 
=  pNode -> ToElement() ;
    
    pChildeElm 
=   new  TiXmlElement( " child1 " ) ;
    pChildeElm
-> SetAttribute( " num " 9 ) ;
    
    pNode 
=  pRootElm -> InsertEndChild( * pChildeElm) ;
    TiXmlElement
*  pChildeElm1  =  NULL; 
    pChildeElm1 
=  pNode -> ToElement() ;
    pChildeElm1
-> InsertEndChild( * pText) ;
    
    delete pChildeElm ;
    pChildeElm 
=  NULL ;
    pChildeElm 
=   new  TiXmlElement( " child2 " ) ;
    pChildeElm
-> SetAttribute( " num " 10 ) ;
    
    pNode 
=  pRootElm -> InsertBeforeChild (pChildeElm1,  * pChildeElm) ;
    TiXmlElement
*  pChildeElm2  =  NULL; 
    pChildeElm2 
=  pNode -> ToElement() ;
    pChildeElm2
-> InsertEndChild( * pText) ;
    
    
    xmlDoc.Print() ;
    
    xmlDoc.SaveFile(); 
//  把XML文件写入硬盘
    
    
return   0  ;
}


int  ReadXML()
...{
    cout
<< endl ;
    cout
<< " 开始read XML " << endl ;
    TiXmlDocument xmlDoc( 
" test.xml "  );
    xmlDoc.LoadFile() ;
    
    TiXmlElement
*  xmlRootElement  =   0  ;
    TiXmlElement
*  xmlSubElement  =   0  ;
    TiXmlNode 
*  pNode  =  NULL; 
    
    pNode 
=  xmlDoc.FirstChild( " todo " ) ;
    xmlRootElement 
=  pNode -> ToElement() ;
    
    
if (xmlRootElement)
    ...{
        pNode 
=  xmlRootElement -> FirstChild( " child1 " ) ;
        xmlSubElement 
=  pNode -> ToElement() ;
        cout
<< xmlSubElement -> Value() << endl ;
        cout
<< xmlSubElement -> Attribute( " num " ) << endl ;
        cout
<< xmlSubElement -> GetText() << endl ;
    }
    
else
    ...{
        cout
<< " 找不到根元素 " << endl ;
    }
    
    cout
<< " 结束read XML " << endl ;
    
return   0  ;
}

int  ReadXML2()
...{
    cout
<< endl ;
    cout
<< " 开始read XML " << endl ;

    
const   char *  demoEnd  = " <?xml version= " 1.0 "  encoding= " gb2312 "  standalone= " yes "  ?> "
                         
" <todo> "
                         
" <child2 num= " 10 " >good</child2> "
                         
" <child1 num= " 9 " >good</child1> "
                         
" </todo> "  ;
    TiXmlDocument xmlDoc;

    xmlDoc.Parse( demoEnd ) ;
    
    TiXmlElement
*  xmlRootElement  =   0  ;
    TiXmlElement
*  xmlSubElement  =   0  ;
    TiXmlNode 
*  pNode  =  NULL; 
    
    pNode 
=  xmlDoc.FirstChild( " todo " ) ;
    xmlRootElement 
=  pNode -> ToElement() ;
    
    
if (xmlRootElement)
    ...{
        pNode 
=  xmlRootElement -> FirstChild( " child1 " ) ;
        xmlSubElement 
=  pNode -> ToElement() ;
        cout
<< xmlSubElement -> Value() << endl ;
        cout
<< xmlSubElement -> Attribute( " num " ) << endl ;
        cout
<< xmlSubElement -> GetText() << endl ;
    }
    
else
    ...{
        cout
<< " 找不到根元素 " << endl ;
    }
    
    cout
<< " 结束read XML " << endl ;
    
return   0  ;
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值