首页 > 解决方案 > 简单的 XPath 程序不起作用

问题描述

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。怎么了?

标签: c++xmlxpathpugixml

解决方案


我的代码中有 2 个错误:

  1. 要匹配<node>文档中的所有元素,我们需要使用以下 XPath 表达式:“//node”

  2. 运行 XPath 查询的不同语法:


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

打印 2。


推荐阅读