TinyXml来解析conf文件

时间:2011-11-12 22:27:47

标签: c++ xml

我试图了解如何使用TinyXML库。

我必须解析这个conf文件:

<?xml version="1.0" encoding="UTF-8"?>


<Client>
    <port  num = "20035">
    <server_addr ip="127.0.0.1">    

        <AV_list>
                <AV>
                        <AVNAME>BitDefender</AVNAME>>
                        <AVPATH> C:\Program Files\Common Files\BitDefender\BitDefender Threat Scanner\av64bit_26308\bdc.exe </AVPATH>
                        <AVMASK>0x80000000</AVMASK>
                        <AVCOMMANDLINE> %avpath% \log=%avlog% %scanpath% </AVCOMMANDLINE>
                        <AVREGEX>(%scanpath%.*?)+(([a-zA-Z0-9]+\\.)+[a-zA-Z]{2,4})+(.+[a-zA-Z_])</AVREGEX>
                        <AVLOG>C:\log\bd_log.txt</AVLOG>
                </AV>
        </AV_list>  
</Client>

和c ++代码

#include "stdafx.h"
#include "iostream"
#include "tinyxml.h"

int main(int argc, char* argv[])
{

    TiXmlDocument doc( "D:\\client_conf.xml" );
    bool loadOkay = doc.LoadFile();
    if ( loadOkay )  
        printf("Yes \n");
    else
        printf("No \n");

    TiXmlHandle hDoc(&doc);
    TiXmlElement* pElem;
    TiXmlText* pText;
    TiXmlHandle hRoot(0);
    pElem = hDoc.FirstChildElement().Element();    
    if (!pElem)
     printf("error element");

    hRoot = TiXmlHandle(pElem);
    pElem = hRoot.FirstChild("server_addr").Element();
    const char* info = pElem->Attribute("ip");
    printf(  "%s \n", info);    

    pElem = hRoot.FirstChild("port").Element();
    info = pElem->Attribute("num");
    printf( "%s \n", info); 

    system("pause");

    return 0;
}

现在我可以获得前两个参数,但是不知道如何到达“AV_list”块。任何帮助将不胜感激。 (:

1 个答案:

答案 0 :(得分:0)

查看TinyXml文档。你的朋友是TiXmlNode Class Reference。您也可以在TiXmlElements上使用大多数Node函数。 您已经使用FirstChild()函数来获取元素的第一个子元素;使用NextSibling()函数迭代所有元素。您还可以使用NextSiblingElement()函数直接获取元素。

另一个更复杂的解决方案是使用XPath从xml文件中检索元素。有TinyXPath构建于TinyXML之上。它需要一些knowledge of XPath,但它可能是值得的。 (XPath standard