给出XML:
<a>
<result>0</result>
<data>I9C3J9N3cCTZdKGK+itJW1Q==</data>
</a>
我需要得到<result>
为0并对其采取行动的事实。
我在做:
TiXmlDocument doc;
bool bOK = doc.Parse((const char*)chunk.memory, 0, TIXML_ENCODING_UTF8);
if (bOK)
{
TiXmlHandle hDoc(&doc);
TiXmlElement *pRoot, *pParm, *pParm2;
pRoot = doc.FirstChildElement("a");
if(pRoot)
{
pParm = pRoot->FirstChildElement("result");
if (pParm)
{
if (pParm->GetText()=="0")
{
pParm2 = pRoot->NextSiblingElement("data");
if (pParm2)
{
sValue = pParm2->GetText();
std::cout << "sValue: " << sValue << std::endl;
}
}
}
}
}
我认为GetText()
是正确的答案,但我做错了,因为我从未进入if
检查<data>
元素。
有人可以为我解释一下吗?
答案 0 :(得分:2)
因为在您的情况下,<data>
不是<a>
的兄弟姐妹。
您正在检查 pRoot - &gt; NextSiblingElement(“data”),而您应检查 pParm - &gt; NextSiblingElement(“data”);
您也可以将其更改为
pParm2 = pRoot->FirstChildElement("data");
修改强> 对不起,我以为你是指这个:
if (pParm2)
所以,解决方案可能是这样的:
if (std::string(pParm->GetText())=="0")
或
if (strcmp(pParm->GetText(), "0"))
你选择。我更喜欢第一个。
编辑2:
我真的很抱歉,我忘记了strcmp返回2个字符串相同位置的第一个位置,所以,在你的情况下它应该是:
if (strcmp(pParm->GetText(), "0") == 0)
您还需要包含<string.h>
。