我正在尝试使用pugixml从大型XML文件中提取数据。我只对节点BAR和Nm中值的值感兴趣:
<Document xmlns="xxxxxx" xmlns:xsi="vvvvvvv">
<Outer>
<HDR>
<MsgId>FOOBAR222222</MsgId>
<ID>
<AAAAA>FOOBAR222222</AAAAA>
</ID>
</HDR>
<ENTRY>
<Status>existing</Status>
<ELEM>
<TM>2012-11-19T13:00:00</TM>
</ELEM>
<FOO>
<BAR>xxxxx</BAR>
<NM>
<Nm>yyyyyyy</Nm>
</NM>
</FOO>
</ENTRY>
从我看到的情况来看,可以遍历根文档,但是,我在访问父节点和子节点时有点迷失:
void walk(xml_node parent)
{
for(xml_node child = parent.first_child(); child; child = child.next_sibling())
{
// ... Would like to output: "FOO: xxxx / NM: yyyyyyyy"
}
}
答案 0 :(得分:2)
您可以为first_child()
和其他成员函数提供参数:
auto Outer = document.first_child("OUTER");
auto Entry = Outer.first_child("ENTRY");
auto Foo = Entry.first_child("FOO");
等
当您最终到达目的地时,请使用.value()
来获取节点值。
PugiXML还支持XPath,但在这种情况下可能会有点过分。
答案 1 :(得分:0)
Pugi还有一个简单的路径设施5.10. Miscellaneous functions
你可以只用一行来完成上述工作:
document.first_element_by_path("/Document/Outer/ENTRY/FOO/BAR").first_child().value();