You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PugiXML的简易XPath程序失效,如何获取XML中node的attr1属性值?

使用PugiXML获取XML中的元素及attr1属性值

先看你提供的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属性值。完整代码如下:

#include "pugixml.hpp"
#include <iostream>
using namespace pugi;

int main() {
    xml_document doc;
    xml_parse_result result = doc.load_file("tree.xml");

    // 先检查文件加载是否成功
    if (!result) {
        std::cout << "XML文件加载失败,错误信息:" << result.description() << std::endl;
        return 1;
    }

    // 定义XPath查询:获取所有node元素
    xpath_query query("//node");
    xpath_node_set nodes = query.evaluate_node_set(doc);

    // 遍历所有匹配的node元素
    for (xpath_node node : nodes) {
        xml_element elem = node.node();
        std::cout << "找到<node>元素" << std::endl;
        
        // 获取attr1属性值,注意处理属性不存在的情况
        const char* attr1_value = elem.attribute("attr1").value();
        if (attr1_value && *attr1_value) {
            std::cout << "attr1属性值:" << attr1_value << std::endl;
        } else {
            std::cout << "该<node>元素没有attr1属性" << std::endl;
        }
        std::cout << "-------------------------" << std::endl;
    }

    return 0;
}

关键调整点说明:

  • XPath查询语句:用//node可以匹配XML文档中所有层级的<node>元素,不管它在哪个位置。如果只想匹配<mesh>直接子节点的<node>,可以改成/mesh/node。
  • 加载结果检查:增加了文件加载失败的判断,方便排查问题。
  • 属性获取:使用elem.attribute("attr1").value()获取属性值,同时做了空值判断,避免遇到没有attr1属性的元素时输出空内容。
  • 遍历节点集:通过xpath_node_set遍历所有匹配的节点,逐个处理每个<node>元素。

运行这段代码后,你会看到输出:

找到<node>元素
attr1属性值:value1
-------------------------
找到<node>元素
attr1属性值:value2
-------------------------

内容的提问来源于stack exchange,提问作者user4035

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:27:48