-4

我有一个类似的xml;

<a>
<b att="x">
</b>
</a>

我用java解析这个xml,我手里有一个节点b。我的问题是我怎样才能把这个节点转换成xpath表达式a/b[@att='x']

4

1 回答 1

1

我不认为有一个绝对通用的解决方案。在 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 值的情况下,它不适用于位置等)和也许必须以更精确的形式编写。这只是一个想法。

于 2013-09-13T09:31:16.187 回答