所以我的XML如下所示
<level1>
<level2>
<hero1>
</hero1>
</level2>
<level2>
<hero2>
</hero2>
</level2>
</level1>
现在我想访问hero2
,但是当我这样做时,假设doc
是我的XML数据
doc.child("level1").child("level2").child("hero2")
它返回false
,这意味着它无法找到我的hero2
。我怎么能找到它?
答案 0 :(得分:1)
让我们考虑一下您的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循环通过所有兄弟姐妹直到找到“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"
}
答案 1 :(得分:0)
要回答算法:如果您(可能)有多个具有相同名称的子项,请使用'property' => 'og:image:width',
和first_child(name)
对其进行迭代。