tinyxml как с ним работать, когда несколько xml файлов? - PullRequest
2 голосов
/ 29 июня 2011

у меня есть такой xml

<xml http://......>
<value>
<name>me</name>
<age>12</age>
</value>
<value>
<name>kk</name>
<age>1</age>
</value>
</xml>

этот xml находится в строковом значении с именем s; я сделал:

const char *data =s.c_str();

TiXmlDocument doc;
doc.Parse((const char*)data, 0, TIXML_ENCODING_UTF8);
const std::string m_name;

TiXmlHandle handle(&doc);
TiXmlElement* section;
section = handle.FirstChild("xml").FirstChild("value").FirstChild("name").Element();
if (section) {//code }

это дает мне только имя с первого раза. Как перейти ко второму?

ТНХ

Ответы [ 2 ]

0 голосов
/ 29 июня 2011

Попробуйте это вместо последних 3 строк вашего кода:

TiXmlElement* xml = handle.FirstChildElement("xml");

TiXmlElement* value = xml->FirstChildElement("value");
while (value)
{
    TiXmlElement* section = value->FirstChildElement("name");
    if (section) 
    {
        //code 
    }
    value = value->NextSiblingElement("value");
}

На самом деле вы должны проверить, если результаты value->FirstChildElement("name") и handle->FirstChildElement("xml") не равны NULL.

0 голосов
/ 29 июня 2011

Используйте NextSibling или NextSiblingElement, чтобы перейти к следующему элементу в той же иерархии текущего поддерева DOM.

Все братья и сестры связаны друг с другом и вызывают NextSibling в последнем из них.вернет NULL.Предполагая, что у вас есть первый дочерний элемент и вы хотите запустить некоторый код на нем и на всех его братьях и сестрах, он может выглядеть так:

TiXmlElement* element = ... (first child element)
do {
    // process the current element
}
// try to advance to the next sibling, break the loop if there is none.
while((element = element->NextSiblingElement()) != NULL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...