我的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";
}
但它没有显示任何内容。
任何人都知道可能出错了什么?
答案 0 :(得分: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");`