我试图了解如何使用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”块。任何帮助将不胜感激。 (:
答案 0 :(得分:0)
查看TinyXml文档。你的朋友是TiXmlNode Class Reference。您也可以在TiXmlElements上使用大多数Node函数。 您已经使用FirstChild()函数来获取元素的第一个子元素;使用NextSibling()函数迭代所有元素。您还可以使用NextSiblingElement()函数直接获取元素。
另一个更复杂的解决方案是使用XPath从xml文件中检索元素。有TinyXPath构建于TinyXML之上。它需要一些knowledge of XPath,但它可能是值得的。 (XPath standard)