Я экспериментирую с 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();