转载自:http://www.cppblog.com/true/archive/2007/04/04/21250.html

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自带的例子。
#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

     我参考了网上的有关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 ;
Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐