TinyXML获得价值

时间:2013-03-04 19:36:36

标签: c++ xml parsing tinyxml

给出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>元素。

有人可以为我解释一下吗?

1 个答案:

答案 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>