Xpath 匹配一个节点并获取它的值

Posted

技术标签:

【中文标题】Xpath 匹配一个节点并获取它的值【英文标题】:Xpath Matching a node and getting the value of it 【发布时间】:2021-10-23 13:00:03 【问题描述】:
    下面是xml文件:

file1.xml

<?xml version="1.0" encoding="UTF-8"?><W4N xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:functx="http://www.functx.com"><LUNGROUP><OBJECT lungroupID="0" lunIds="0,221,228"/></LUNGROUP><LUNGROUP><OBJECT lungroupID="1" lunIds="1,3,5/></LUNGROUP></W4N>

我想匹配 lunIds。我给出了下面的 xpath 表达式 /W4N/LUNGROUP/OBJECT[tokenize(@lunIds,',')='228'] 它显示结果为 Elements found: 1 现在我的要求是获取匹配元素的 lungroupID。如何使用 xpath 执行此操作?非常感谢任何帮助。

【问题讨论】:

/W4N/LUNGROUP/OBJECT[tokenize(@lunIds,',')='228']/@lungroupID 如果我想在多个值匹配的情况下将 lungroupID 逗号分隔开,还有一件事。我需要做什么更改? @Barun 如果您将xsl:value-of 指令与上述表达式一起使用,您将获得一个以空格分隔的选定值列表。您可以使用translate() 函数将空格转换为逗号。 【参考方案1】:

我没有看到您要发布的 XML,但您应该能够在 xpath 表达式的末尾添加所需的属性:

/W4N/LUNGROUP/OBJECT[tokenize(@lunIds,',')='228']/@lungroupID

【讨论】:

如果我想在多个值匹配时将 lungroupID 逗号分隔开,还有一件事。我需要做什么更改?下面是 xml: w3.org/2001/XMLSchema" xmlns:functx="functx.com"><LUNGROUP><OBJECTlungroupID="0" lunIds="0,221,228 "/> 您可以使用此表达式选择属性值://*/@lungroupID 至于逗号分隔,这取决于您编码的语言。 @Barun,tokenize 的使用建议您使用 XPath 2 或更高版本,因此对于逗号分隔的结果,您还可以使用 string-join 函数,例如string-join(/W4N/LUNGROUP/OBJECT[tokenize(@lunIds,',')='228']/@lungroupID, ',').

以上是关于Xpath 匹配一个节点并获取它的值的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫编程思想(42):XPath实战:匹配属性

XPath如何定位dom节点

如何在与 xpath 和 lxml 匹配的包含后找到 X 单元格的值

爬虫进阶 - XPath应用

xpath

为啥这个 xpath 匹配这个文本节点?