如果说我有以下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中对此进行编码。

最佳答案

听起来XPath表达式直到运行时才是未知的。
而且您想获得XPath表达式选择的每个节点的父级...对吗? <comment>元素是每个comment/@id属性的父级。获取<comment>元素等效于获取其子树(后代),因为您可以使用其他XPath表达式或DOM函数提取其后代,或者可以复制<comment>元素及其后代。

回答您问题的一种方法是将“ / ..”简单地附加到XPath表达式的末尾。例如。

"/title/comment/@id"


会成为

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


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

07-24 09:47
查看更多