如果说我有以下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中对此进行编码。
答案 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中工作一半呢?