对于使用TinyXML的人来说,这应该是一个非常简单的问题。我正在尝试使用TinyXML来解析XML文档并提取一些值。我昨天想出了如何在库中添加文件,并且已经成功加载了文档(嘿,这是一个开始)。
我一直在阅读手册,但还不太清楚如何提取各个属性。在Google搜索之后,我还没有找到具体示例的示例,因此也许这里使用TinyXML的人可以提供帮助。下面是XML的一部分,也是我开始解析XML的地方。
XML:
<?xml version='1.0' encoding='UTF-8'?>
<hnisi>
<head><version>1.0</version></head>
<body>
<params>
<param key="FHZ" val="1" />
<param key="MSG" val="login failed" />
<param key="SESSIONID" val="HISID6B5FD5E290884C77A2BA827AA2B1E53D" />
</params>
</body>
</hnisi>
加载/解析代码:
TiXmlDocument doc;
const char *filedate=response.return_->c_str();
doc.Parse(filedata, 0, TIXML_ENCODING_UTF8);
TiXmlElement *pRoot, *pParm, *pProcess, *pApp, *pLineFormat;
pRoot = XMLdoc.FirstChildElement( "hnisi" );
if ( pRoot )
{
pParm= pRoot->FirstChildElement( "params" );
while(pParm)
{
// I don't know here,how do I read the attribute of value of FHZ,MSG and SESSIONID?
}
}
最佳答案
您错过了获得<body>
元素(它是<hnisi>
的子元素),然后又想在XML中使用<param>
元素(它是<params>
的子元素)。要获取属性,只需使用TiXmlElement的Attribute
函数。
TiXmlDocument doc("yourfile.xml");
if(doc.LoadFile())
{
TiXmlElement *pRoot, *pBody, *pParms, *pProcess, *pApp, *pLineFormat, *pParm;
pRoot = doc.FirstChildElement( "hnisi" );
if ( pRoot )
{
pBody= pRoot->FirstChildElement( "body" ); //body should be read
if (pBody) {
pParms= pBody->FirstChildElement( "params" ); //now params
if(pParms)
{
pParm=pParms->FirstChildElement("param");
while (pParm) {
// now loop al param elements and get their attributes
std::cout <<"key="<<pParm->Attribute("key")<<std::endl;
std::cout <<"val="<<pParm->Attribute("val")<<std::endl;
//next sibling
pParm=pParm->NextSiblingElement("param");
}
}
}
}
}