tinyxml如何在多个xml文件时使用它

tinyxml how to work with it when multiple xml files?

本文关键字:文件 xml tinyxml      更新时间:2023-10-16

我有一个类似的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 }

它只给了我第一个名字。如何进入第二阶段?

thx

使用NextSiblingNextSiblingElement来获取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);

试试这个,而不是代码的最后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。