Java 将文档节点转换为xpath表达式

Java 将文档节点转换为xpath表达式,java,xml,xpath,Java,Xml,Xpath,我有一个类似xml的 <a> <b att="x"> </b> </a> 我用java解析这个xml,手里有一个节点b。我的问题是如何将这个节点转换成xpath表达式a/b[@att='x']?我认为没有一个绝对通用的解决方案。在XPath2.0中,您可能会 string-join( for $x in ./ancestor-or-self::* return if ($x/@att) th

我有一个类似xml的

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


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

我认为没有一个绝对通用的解决方案。在XPath2.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>

但它在这种形式中非常有限(它只查找一个属性,该属性必须命名为“att”,在多个元素b具有相同@att值等情况下,它不与位置一起工作),并且可能必须以更精确的形式编写。这只是一个想法。

你的目标是什么
a/b[@att='x']
看起来像是从具有相同属性的另一个文档中找到名为b的标记的正确表达式。无法将节点转换为xpath表达式。那没有道理。您可以对一个节点计算xpath表达式,甚至可以得到一个节点作为响应。
a/b[@att='x']
应该这样做。如果代码对你不起作用,给我们看看。不,不清楚。它总是名为
b
的节点吗?如果a和b都有属性呢?然后呢?或者如果两者都没有呢?或者,如果在
b
中有一个节点
c
?或者如果有2个
b
节点?现在,你的问题太本地化了。试着给我们看看你的代码。
root/a/b[@att="z"]