我有这样的结构的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/