如何使用pugixml提取子数据

How to extract child data with pugixml?

本文关键字:数据 提取 pugixml 何使用      更新时间:2023-10-16

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

您可以为 first_child() 和其他成员函数提供参数:

auto Outer = document.first_child("OUTER");
auto Entry = Outer.first_child("ENTRY");
auto Foo = Entry.first_child("FOO");

等。

最终到达目标时,请使用 .value() 获取节点值。

PugiXML还具有XPath支持,但在这种情况下,这可能是矫枉过正。

Pugi也有一个简单的路径设施5.10。其他函数

您只需一行即可完成上述操作:

document.first_element_by_path("/Document/Outer/ENTRY/FOO/BAR").first_child().value();