所以我的 XML 如下
<level1>
<level2>
<hero1>
</hero1>
</level2>
<level2>
<hero2>
</hero2>
</level2>
</level1>
现在我想访问 hero2
,但是当我访问时,假设 doc
是我的 XML 数据
doc.child("level1").child("level2").child("hero2")
它返回 false
,这意味着它找不到我的 hero2
。我怎么能找到它?
最佳答案
让我们考虑一下您的 XML 文件。当你打电话时:
doc.child("level1").child("level2").child("hero2");
相当于:
element1 = doc.child("level1").child("level2");
element = element1.child("hero2");
让我们看看:
pugi::xml_node element1 = doc.child("level1").child("level2");
// Element 1 gives you first node "level2"
// Element 2 does not have child ("hero2") so the call will return NULL
pugi::xml_node element2 = element1.child("hero2"); // element2 is NULL
// Element 2 has a child "hero1"
// So you can get it as:
pugi::xml_node element2child_hero1 = element1.child("hero1"); //
但是你想要得到“hero2”而不是“hero1”。
下面介绍了针对您的特定文件的解决方案之一。 for 循环遍历所有 sibling ,直到找到“hero2”:
int findHero2(const char *file)
{
pugi::xml_document doc;
if (!doc.load_file(file)) return -1;
pugi::xml_node level1 = doc.child("level1");
for (pugi::xml_node level2 = level1.first_child(); level2; level2 = level2.next_sibling())
{
pugi::xml_node node = level2.child("hero2");
if(node!=NULL)
{
// I have found "hero2" node
// ...
return 0; // success
}
}
return -2; // no "hero2"
}
关于c++ - pugiXML 定位具有相同 parent 值的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36229999/