3

次のような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>

誰かが私のためにいくつかの光を当てることができますか?

4

1 に答える 1

3

あなたの場合、<data>の兄弟ではないから<a>です。

pRoot ->NextSiblingElement("data") をチェックしていますが、pParm -> 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>ます。

于 2013-03-04T19:42:40.207 に答える