我有一个类似的xml;
<a>
<b att="x">
</b>
</a>
我用java解析这个xml,我手里有一个节点b。我的问题是我怎样才能把这个节点转换成xpath表达式a/b[@att='x']
?
我不认为有一个绝对通用的解决方案。在 xpath 2.0 中,您可能会做类似的事情
string-join(
for $x in ./ancestor-or-self::* return
if ($x/@att)
then concat($x/name(), '[@att="', $x/@att, '"]')
else $x/name()
, '/'
)
用于输入
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a>
<b att="x"></b>
<b att="y"></b>
<b att="z"></b>
</a>
</root>
假设您持有第三个 b 元素,它会给出字符串
root/a/b[@att="z"]
但是这种形式非常有限(它只查找一个属性,该属性必须命名为“att”,在多个元素 b 具有相同 @att 值的情况下,它不适用于位置等)和也许必须以更精确的形式编写。这只是一个想法。