如何执行XML节点B中存储的XPath表达式以获取节点A的值?
解决XML中执行节点存储的XPath表达式问题
问题原因
你之前用(B/text())/text()这类写法行不通,核心原因是XPath本身不支持直接将字符串当作表达式动态执行——B/text()只能取出节点B里的文本字符串,没法把这个字符串当成XPath去解析运行。
解决方案
根据你使用的XPath版本,有两种处理方式:
1. XPath 2.0及以上版本
XPath 2.0+提供了evaluate()函数,可以直接执行字符串形式的XPath表达式。假设你的上下文节点是<Example>,使用以下表达式即可:
evaluate(B/text())
这个函数会把节点B的文本内容当作XPath表达式执行,直接返回节点A的文本值test1。
2. XPath 1.0版本(无原生动态执行支持)
XPath 1.0本身没有内置的动态执行函数,需要借助宿主语言(比如Python、Java、C#等)分两步实现:
- 第一步:用XPath取出节点B的文本内容(即
A/text()); - 第二步:把这个字符串作为新的XPath表达式,再次执行以获取节点A的值。
举个Python的简单示例(基于lxml库):
from lxml import etree xml_content = """<?xml version="1.0" encoding="utf-8"?> <Example> <A>test1</A> <B>A/text()</B> </Example>""" tree = etree.fromstring(xml_content) # 获取节点B中的XPath表达式 xpath_expr = tree.xpath("B/text()")[0] # 执行该表达式 result = tree.xpath(xpath_expr) print(result) # 输出: ['test1']
内容的提问来源于stack exchange,提问作者user22443133
相关产品推荐
相关产品推荐

