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

如何用XPath选择名称含点“.”的XML节点并获取其文本值

解决XML节点名称含点号的XPath查询问题

要精准获取名称带点的<pos.>节点文本,别依赖节点顺序的临时方案,试试这几种可靠方法:

XPath 1.0 通用方案

XPath 1.0无法直接书写带点的节点名,用local-name()函数匹配节点本地名称即可,兼容性拉满:

//lines/*[local-name()='pos.']/text()

这个表达式会遍历所有lines节点的子元素,筛选出本地名称等于pos.的节点并提取文本,完全不受节点顺序影响。

XPath 2.0+ 简化方案

如果你的工具支持XPath 2.0及以上版本,可直接用反斜杠转义点号:

//lines/pos\./text()

若存在命名空间,还可加上通配符:

//lines/*:pos./text()

不过local-name()的方法适配性更强,无论XPath版本都能正常运行。

代码示例(Python lxml)

用Python处理的示例代码如下:

from lxml import etree

xml_content = """
<order>
    <purchase-order-no>1412530</purchase-order-no>
    <expected-delivery-date>2023-10-21</expected-delivery-date>
    <supplier-no>600857</supplier-no>
    <shop>
        <code>123</code>
        <name>Shop Name XYZ</name>
        <street>Random Street 23</street>
        <pc>9876</pc>
        <city>CityABC</city>
    </shop>
    <lines>
        <pos.>1</pos.>
        <article-nr>5180063</article-nr>
        <supplier-article-nr>523.442.0</supplier-article-nr>
        <qty>1</qty>
        <unit>PCE</unit>
        <unit-price>5.44</unit-price>
        <details>some optional details</details>
    </lines>
    <lines>
        <pos.>2</pos.>
        <article-nr>5185838</article-nr>
        <supplier-article-nr>741.823.1</supplier-article-nr>
        <qty>3</qty>
        <unit>PCE</unit>
        <unit-price>2.93</unit-price>
        <details/>
    </lines>
</order>
"""

tree = etree.fromstring(xml_content)
pos_values = tree.xpath("//lines/*[local-name()='pos.']/text()")
print(pos_values)  # 输出结果:['1', '2']

内容的提问来源于stack exchange,提问作者G. Gendre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:50:34