如何实现XPath嵌套属性匹配逻辑?请求技术协助
问题解答
是否可行?
完全可行,有两种实现方式:直接在XPath中引用目标值,或者在支持变量的环境下先存储值再调用。
直接编写XPath实现
不需要单独存储/A/B/@id的值,直接在谓词中做比较即可,对应的XPath表达式为:
/A/C[@parent = /A/B/@id]/text()
这个表达式会直接匹配所有parent属性值等于<B>节点id属性值的<C>节点,并返回其文本内容(示例中会返回PQR)。
先存储值再调用(支持变量的场景)
如果你的使用环境支持XPath变量(比如XSLT、Python的lxml库等),可以先将/A/B/@id的值存入变量,再在后续XPath中引用:
以XSLT为例:
<xsl:variable name="result" select="/A/B/@id"/> <xsl:value-of select="/A/C[@parent = $result]/text()"/>
在Python lxml中可以这样写:
from lxml import etree xml_content = ''' <A> <B id="1">W</B> <C parent="1">PQR</C> <C parent="2">ABC</C> </A> ''' tree = etree.fromstring(xml_content) result = tree.xpath('/A/B/@id')[0] target_text = tree.xpath(f'/A/C[@parent="{result}"]/text()')[0] print(target_text) # 输出 PQR
补充说明
无论哪种方式,都不要求<C>节点是<B>的紧邻节点,只要它们同属于<A>节点下即可,完全符合需求。
内容的提问来源于stack exchange,提问作者Divya MV
相关产品推荐
相关产品推荐

