如何获取Xpath表达式的子树?

时间:2011-08-25 15:32:38

标签: java dom xpath

如果说我有以下XML文件:

<title text=“title1">
    <comment id=“comment1">
        <data> this is part of comment one</data>
        <data> this is some more of comment one</data>
    </comment>
    <comment id=“comment2”>
        <data> this is part of comment two</data>
        <data> this is some more of comment two</data>
        <data> this is even some more of comment two</data>
    </comment>
</title>

我给出了以下XPath查询:

/title/comment/@id

获取表达式所属的子树的最佳方法是什么。

例如,上面的表达式将返回:

  • id="comment1"
  • id="comment2"

comment1属于子树:

    <comment id="comment1">
        <data> this is part of comment one</data>
        <data> this is some more of comment one</data>
    </comment>

并且,comment2属于子树:

    <comment id=“comment2">
        <data> this is part of comment two</data>
        <data> this is some more of comment two</data>
        <data> this is even some more of comment two</data>
    </comment>

我想要的原因是我可以递归地在解析Xpath表达式的子树上进行调用。

我使用DOM在Java中对此进行编码。

3 个答案:

答案 0 :(得分:1)

/title/comment[@id]

将检索具有id属性的所有评论元素。

答案 1 :(得分:1)

听起来XPath表达式在运行时才会被识别。 并且您希望获取XPath表达式选择的每个节点的父级...是吗? <comment>元素是每个comment/@id属性的父元素。获取<comment>元素等同于获取其子树(后代),因为您可以使用其他XPath表达式或DOM函数提取其后代,或者您可以使用<comment>元素 >它的后代。

回答你的问题的一种方法是简单地在XPath表达式的末尾添加“/ ..”。 E.g。

"/title/comment/@id"

会变成

"/title/comment/@id/.."

这相当于@ Dan的答案,但可以很容易地从XPath表达式中得出。

答案 2 :(得分:1)

XPath表达式返回您的案例属性节点中的节点。调用Java代码可以对这些节点做任何喜欢的事情,例如导航到父节点或父节点的后代。

但是,为什么不在XSLT或XQuery中完成所有工作而不是在XPath中完成一半工作而在Java中工作一半呢?