XPath:从子节点获取父节点

GibboK:

我需要为子节点获取父节点 title 50

目前,我只使用

//*[title="50"]

我怎么能得到它的父母?结果应为store节点。


<?xml version="1.0" encoding="utf-8"?>
<d:data xmlns:d="defiant-namespace" d:mi="23">
    <store d:mi="22">
        <book price="12.99" d:price="Number" d:mi="4">
            <title d:constr="String" d:mi="1">Sword of Honour</title>
            <category d:constr="String" d:mi="2">fiction</category>
            <author d:constr="String" d:mi="3">Evelyn Waugh</author>
        </book>
        <book price="8.99" d:price="Number" d:mi="9">
            <title d:constr="String" d:mi="5">Moby Dick</title>
            <category d:constr="String" d:mi="6">fiction</category>
            <author d:constr="String" d:mi="7">Herman Melville</author>
            <isbn d:constr="String" d:mi="8">0-553-21311-3</isbn>
        </book>
        <book price="8.95" d:price="Number" d:mi="13">
            <title d:constr="String" d:mi="10">50</title>
            <category d:constr="String" d:mi="11">reference</category>
            <author d:constr="String" d:mi="12">Nigel Rees</author>
        </book>
        <book price="22.99" d:price="Number" d:mi="18">
            <title d:constr="String" d:mi="14">The Lord of the Rings</title>
            <category d:constr="String" d:mi="15">fiction</category>
            <author d:constr="String" d:mi="16">J. R. R. Tolkien</author>
            <isbn d:constr="String" d:mi="17">0-395-19395-8</isbn>
        </book>
        <bicycle price="19.95" d:price="Number" d:mi="21">
            <brand d:constr="String" d:mi="19">Cannondale</brand>
            <color d:constr="String" d:mi="20">red</color>
        </bicycle>
    </store>
</d:data>
RenéLink:

使用带有父节点名称parent

//*[title="50"]/parent::store

如果XPath仅是父节点,则它将选择该父节点store

但您也可以使用其中之一

//*[title="50"]/parent::*
//*[title="50"]/..

这些xpath将选择任何父节点。因此,如果文档发生更改,即使它不是您期望的节点,您也将始终选择一个节点。

编辑

在给定的示例中,父母是自行车,父母是商店,会发生什么情况?

它会上升吗?

不可以,只有它是与匹配的节点的父级时,才会选择商店//*[title="50"]

如果不是,是否有一种在这种情况下上升的方法,如果没有这样的父级,则返回None?

是的,您可以使用ancestor

//*[title="50"]/ancestor::store

这将选择//*[title="50"]存储的节点匹配的所有祖先例如

<data xmlns:d="defiant-namespace" d:mi="23">
    <store mi="1">
        <store mi="22">
            <book price="8.95" d:price="Number" d:mi="13">
                <title d:constr="String" d:mi="10">50</title>
                <category d:constr="String" d:mi="11">reference</category>
                <author d:constr="String" d:mi="12">Nigel Rees</author>
            </book>
        </store>
    </store>
</data>

XPath选择结果

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章