Простая программа XPath не работает - PullRequest
0 голосов
/ 05 мая 2018

XML-файл tree.xml:

<?xml version="1.0"?>
<mesh name="mesh_root">
    some text
    <![CDATA[someothertext]]>
    some more text
    <node attr1="value1" attr2="value2" />
    <node attr1="value2">
        <innernode/>
    </node>
</mesh>

Я хочу получить <node> предметов. А потом их attr1 значений.

C ++ код:

#include "pugixml.hpp"
#include <iostream>

using namespace pugi;
int main()
{
    xml_document doc;

    xml_parse_result result = doc.load_file("tree.xml");

    xpath_query q("node");
    xpath_node_set ns = doc.select_nodes(q);
    std::cout << ns.size() << std::endl;
}

Я предположил, что результат должен быть 2, но по какой-то причине это 0. Что не так?

1 Ответ

0 голосов
/ 05 мая 2018

В моем коде было 2 ошибки:

  1. Чтобы сопоставить все элементы <node> в документе, нам нужно использовать следующее выражение XPath: "// узел"

  2. Другой синтаксис для запуска запроса XPath:


xpath_query q("//node");
xpath_node_set ns = q.evaluate_node_set(doc);
std::cout << ns.size() << std::endl;

Отпечатки 2.

...