【问题标题】:Convert a document node to xpath expression将文档节点转换为 xpath 表达式
【发布时间】:2013-09-17 20:32:05
【问题描述】:

我有一个类似的xml;

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

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

【问题讨论】:

  • 你的目标是什么? a/b[@att='x'] 看起来是获取名为 b 的标签的正确表达式
  • 从另一个文档中查找具有相同属性的节点。
  • 您不能将节点转换为 xpath 表达式。那没有意义。您可以针对节点评估 xpath 表达式,甚至可以获取节点作为响应。
  • a/b[@att='x'] 应该这样做。如果它不适合您,请向我们展示您的代码。
  • 不,不清楚。它总是名为 b 的节点吗?如果 a 和 b 都具有属性怎么办?然后呢?或者如果两者都没有怎么办?或者如果b 内部有一个节点c 怎么办?或者如果有 2 个b 节点?现在,你的问题太本地化了。尝试向我们展示您的代码。

标签: java xml xpath


【解决方案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 值等,它不适用于位置等。等等.) 并且可能必须以更精确的形式编写。这只是一个想法。

【讨论】:

    猜你喜欢
    • 2012-05-15
    • 2015-02-15
    • 2012-03-21
    • 1970-01-01
    • 2020-07-21
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多