2011-11-12 3 views
0

TinyXMLライブラリの使い方を理解しようとしています。TinyXmlがconfファイルを解析する

私はこの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; 
} 

を今私は、最初の2つのparamを得ることができますが、 "AV_list" ブロックに到達する方法を見つけ出すいけません。どんな助けもありがとう。 (:

答えて

0

あなたの友人はTiXmlNode Class Referenceです。TiXmlElementsでもほとんどのNode関数を使用することができます。 既にFirstChild()関数を使用して要素の最初の子を取得しています。 NextSibling()関数を使用してすべての要素を繰り返し処理します。また、NextSiblingElement()関数を使用して要素を直接取得することもできます。

Antotherより洗練された解決策は、xmlファイルから要素を取り出すことです。​​はTinyXMLの上に構築されています。knowledge of XPathが必要ですが、それだけの価値があります(XPath standard