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> элемент.

Кто-нибудь может пролить немного света на меня?

2

Решение

Потому что в твоем случае <data> не брат или сестра <a>,

Вы проверяете pRoot-> NextSiblingElement («data»), в то время как вы должны проверить pParm-> NextSiblingElement ( «данные»);

Вы также можете изменить его на

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> тоже.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]