0

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

但它什么也没显示。

有谁知道可能出了什么问题?

4

1 回答 1

1

在你的循环中你仍然有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");`
于 2015-08-24T09:55:16.337 回答