短小精悍的xml读写器-tinyxml

不用使用MS的大型的COM组建去读写xml,有了这个东西,其实就是很小的几个文件,可以方便的读写xml,因为不依赖windows的东西,所以你就可以很方便的把它搬到linux下面了。

下面是我写的简单读写xml的片段代码:

    TiXmlDocument doc( pFile );
    bool bLoad = doc.LoadFile();
    if ( !bLoad )
    {
        Print( “failed to load file” );
        return;
    }
    doc.Print( stdout );

    // read
    TiXmlHandle hDoc(&doc);
    TiXmlNode *pNode = NULL;
    TiXmlElement *pEle = NULL;
    pEle = hDoc.FirstChildElement().Element();
    Print( pEle->Value());
    TiXmlElement *pEle1 = pEle->FirstChildElement();
    Print( pEle1->Value());
    const char *p1 = pEle1->GetText();
    Print( p1 );
    TiXmlElement *pEle2 = pEle1->NextSiblingElement();
    Print( pEle2->Value());
    const char *p2 = pEle2->GetText();
    Print( p2 );
    TiXmlElement *pEle3 = pEle2->NextSiblingElement();
    std::string s;
    s = pEle3->Attribute( “priority” );
    Print( s.c_str());
    s = pEle3->Attribute( “local” );
    int n = 0;
    Print( s.c_str());
    s = pEle3->Attribute( “count”, &n );
    Print( s.c_str());
    const char *p3 = pEle3->GetText();
    Print( p3 );
    Print( pEle3->Value());

    // write
    //TiXmlNode *pTemp =  pEle3->InsertAfterChild( hDoc.FirstChildElement().Child( “port”, 0 ).Node(), *pEle2->Clone() );
    TiXmlNode *pTemp =  pEle3->LinkEndChild( pEle2->Clone());
    if ( NULL == pTemp )
    {
        Print( “failed to insert” );
        Print( doc.ErrorDesc());
    }
    doc.SaveFile();

读写的xml文件的内容我也列出来:

<!– this is a sample xml file to be tested with tinyxml
–>
<test>
    <config>count=1 title=“home”</config>
    <home>address=“yishun”</home>
    <port priority=”1″ local=”flase” count=”5″>55112
        <value>55112</value>
    </port>

</test>

执行我写的这段代码,xml文件就变成这个样子:

<!– this is a sample xml file to be tested with tinyxml
–>
<test>
    <config>count=1 title=&quot;home&quot;</config>
    <home>address=&quot;yishun&quot;</home>
    <port priority=”1″ local=”flase” count=”5″>55112
        <value>55112</value>
        <home>address=&quot;yishun&quot;</home>
    </port>
</test>

上面很容易的看出来,哪些是读哪些是写了。
注意&quot:是”的意思,我自己的写的是”,但是再被tiny保存一遍就变成这个样子了,但是xml读上面的这个文件没有任何问题。

注意: tinyxml不支持如下格式:

<value

here is text

/>

支持的格式是:

<value>

here is text

</value>

注意:tinyxml不会解析文本的等号,例如上面的here is text前面有个v1=,也就是变成:

<value>

v1=here is text

</value>

如果你要出入v1让它替你直接读出here is text,它做不到,你需要读出整个字串,自己分析。但是你可以把上面的一长串东西变成:

<value v1=“here is text”>

</value>

这样v1就变成了它的属性,就可以直接读出了。

我把整个工程(vs2005)上传了,包括测试文件,可以下面的连接得到:

http://download.csdn.net/source/3449562

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *