Как извлечь дочерние данные с 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"}
}

1

Решение

Вы можете дать параметры first_child() и другие функции-члены:

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

и т.п.

Когда вы, наконец, доберетесь до места назначения, используйте .value() чтобы получить значение узла.

PugiXML также поддерживает XPath, но в этом случае это, вероятно, будет излишним.

2

Другие решения

Pugi также имеет простую дорожку 5.10. Разные функции

Вы можете сделать выше всего одну строку:

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

По вопросам рекламы [email protected]