如何用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
相关产品推荐
相关产品推荐

