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

如何使用XPath选择属性名以指定字符串结尾的元素并提取属性值?

提取XML中属性名以_1结尾的属性值解决方案

嘿,我完全懂你现在的痛点——想从XML里捞所有属性名以_1结尾的属性值,但卡在了怎么精准匹配属性名后缀,还有准确获取对应值这两步对吧?下面我给你分几种常用的实现方式,都是实战里好用的方法,你可以按需选:

方法一:Python 标准库 xml.etree.ElementTree

这是Python自带的XML处理库,不用额外安装,适合快速实现:

import xml.etree.ElementTree as ET

# 解析XML文件(如果是字符串的话用ET.fromstring(xml_str))
tree = ET.parse('your_target.xml')
root = tree.getroot()

# 用来存储目标属性值的列表
target_values = []

# 遍历XML里的所有元素
for element in root.iter():
    # 遍历当前元素的所有属性
    for attr_name, attr_value in element.attrib.items():
        # 检查属性名是否以"_1"结尾
        if attr_name.endswith('_1'):
            target_values.append(attr_value)

# 输出结果
print("所有符合条件的属性值:", target_values)

方法二:Python lxml + XPath(更简洁高效)

如果你的XML结构复杂,用XPath可以直接一步筛选,lxml对XPath的支持更完善,需要先安装pip install lxml:

from lxml import etree

# 解析XML文件
tree = etree.parse('your_target.xml')

# 用XPath表达式直接匹配所有属性名以"_1"结尾的属性值
# local-name() 获取属性的本地名称(避免命名空间干扰),ends-with判断后缀
target_values = tree.xpath('//@*[ends-with(local-name(), "_1")]')

print("所有符合条件的属性值:", target_values)

方法三:Java 实现(DOM + XPath)

如果是Java环境,也可以用原生的XML API结合XPath来实现:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class XmlAttrExtractor {
    public static void main(String[] args) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse("your_target.xml");

            XPath xpath = XPathFactory.newInstance().newXPath();
            // 同样用ends-with筛选属性名后缀
            String xpathExpr = "//@*[ends-with(local-name(), '_1')]";
            NodeList attrNodes = (NodeList) xpath.evaluate(xpathExpr, doc, javax.xml.xpath.XPathConstants.NODESET);

            // 遍历输出结果
            System.out.println("所有符合条件的属性值:");
            for (int i = 0; i < attrNodes.getLength(); i++) {
                System.out.println(attrNodes.item(i).getNodeValue());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 如果你的XML带有命名空间,XPath表达式需要做调整,比如在lxml里需要先注册命名空间,或者用*通配前缀;
  • 不管用哪种方法,核心逻辑都是:遍历所有属性 → 检查属性名是否以_1结尾 → 收集对应的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:50:03