c++ - pugiXML 定位具有相同 parent 值的 child

标签 c++ pugixml

所以我的 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/

相关文章:

c++ - 如何将Qt中的组合框元素与具有相同索引的静态 vector 中的预定义元素链接?

c++ - 如何在 C++ 中将局部变量转换为指针?

c++ - 如何在 Windows 上的 C++ 控制台应用程序中捕获 ctrl-c 事件而不进入无限循环?

c++ - 将表单数据直接插入到 PugiXML 文档中

c++ - 如何在pugixml中获取节点的内部XML?

c++ - 如何从此源代码中删除所有空格字符

c++ - 对 'inflateInit2_' 的 undefined reference

c++ - 使用pugixml使用C++解析数据但无法获取所有节点属性

c++ - 删除 XML 文件 C++ 中的子节点

c++ - Pugixml C++解析XML