Pugixml解析器获取元素值

pugixml parser getting element value

本文关键字:元素 获取 Pugixml      更新时间:2023-10-16

我有这样的XML结构:

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

我正确地打印了name tag的值,代码是

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";
    }

但是,我还需要打印name &号码标签在街上,我不能成功。

下面是显示这两个标签元素的值的代码:
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";
}

如果你将我的循环与你在问题中发布的第二个循环进行比较,你会看到我在几个地方用street代替了student。我猜你复制粘贴了你的第一个循环,但忘记改变这些值。

我看到你在你的问题中改变了代码-但是它仍然需要是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");`