如何用pugixml提取子数据?

时间:2012-11-22 10:09:03

标签: c++ xml-parsing pugixml

我正在尝试使用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"
            }
        }

2 个答案:

答案 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();