c++ - pugixml 解析器获取元素值

标签 c++ pugixml

我的 XML 结构如下:

 <info>
     <students>
         <student>
             <name>John</name>
             <street>
                 <name>abcdef</name>
                 <number>55</number>
             </street>
         </student>
     </students>  
  </info>

我用这段代码正确地打印了名称标签的值

pugi::xml_node students = doc.child("info").child("students");

for (pugi::xml_node student = students.child("name"); student; student= student.next_sibling("student"))
    {
        std::cout << "name '" << student.child_value("name") << "'\n";
    }

但是,我还需要打印名称和号码的值 - 街道内的标签,但我无法成功。

这是显示来自这两个标记元素的值的代码:

pugi::xml_node student = doc.child("students").child("student");

for (pugi::xml_node street = student.child("street"); street; street = student.next_sibling("street"))
    {
        std::cout << "name '" << student.child_value("name") << "'\n";
        std::cout << "number '" << student.child_value("number") << "'\n";
    }

但它什么也没显示。

谁知道哪里出了问题?

最佳答案

在你的循环中你仍然有 student 但它需要是 street

for (pugi::xml_node street = student.child("street"); street; street = street.next_sibling("street"))
{
    std::cout << "name '" << street.child_value("name") << "'\n";
    std::cout << "number '" << street.child_value("number") << "'\n";
}

如果您将我的循环与您在问题中发布的第二个循环进行比较,您会发现我在多个地方将 student 替换为 street。我猜你复制粘贴了你的第一个循环但忘了更改这些值。

我看到您更改了问题中的代码 - 但它仍然需要 street = street.next_sibling('street') 才能循环遍历特定学生的所有街道。

添加

刚刚注意到 - 您获取 student 节点的代码缺少 info 节点

你有:

`pugi::xml_node student = doc.child("students").child("student");`

应该是:

`pugi::xml_node student = doc.child("info").child("students").child("student");`

关于c++ - pugixml 解析器获取元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32179192/

相关文章:

c++ - 如何将 pugi::char_t* 转换为字符串

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

c++ - 如何转换pugi :char_t* to string?

c++ - 在管道中调用时从 std::cin 加载 pugi::xml_document 失败

android - 有什么简单的方法可以直接在我的 android 应用程序上使用 c/c++ 源代码吗?

Java 开发人员学习企业 C++。等同于 JDBC 抽象?

c++ - VC++ 中库的链接错误

c++ - 如果两个静态库包含 pugixml objs,如何避免 `already defined` 与 pugixml 链接错误?

c++ - C++ 中的委托(delegate)(或类似的东西)

c++ - 编译器错误C2541- 'delete' : delete : cannot delete objects that are not pointers