XPath:从子节点获取父节点

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

目前我只使用

/*[title=“50”]

我怎样才能得到它的父母?
结果应该是存储节点


<?xml version=“1.0”encoding=“utf-8”?>
<d:data xmlns:d=“违抗名称空间”d:mi=“23”>
<门店d:mi=“22”>
<账面价格=“12.99”d:price=“Number”d:mi=“4”>
<标题d:constr=“String”d:mi=“1”>荣誉之剑&lt/标题>
<d类:constr=“String”d:mi=“2”>小说&lt/类别>
<作者d:constr=“String”d:mi=“3”>伊夫林·沃&lt/作者>
&lt/书籍>
<账面价格=“8.99”d:price=“Number”d:mi=“9”>
<标题d:constr=“String”d:mi=“5”>白鲸&lt/标题>
<d类:constr=“String”d:mi=“6”>小说&lt/类别>
<作者d:constr=“String”d:mi=“7”>赫尔曼·梅尔维尔&lt/作者>
<isbn d:constr=“String”d:mi=“8”>0-553-21311-3&lt/isbn>
&lt/书籍>
<账面价格=“8.95”d:price=“Number”d:mi=“13”>
<标题d:constr=“String”d:mi=“10”>50&lt/标题>
<d类:constr=“String”d:mi=“11”>参考&lt/类别>
<作者d:constr=“String”d:mi=“12”>奈杰尔·里斯&lt/作者>
&lt/书籍>
<账面价格=“22.99”d:price=“Number”d:mi=“18”>
<标题d:constr=“String”d:mi=“14”>指环王&lt/标题>
<d类:constr=“String”d:mi=“15”>小说&lt/类别>
<作者d:constr=“String”d:mi=“16”>J.R.R.托尔金&lt/作者>
<isbn d:constr=“String”d:mi=“17”>0-395-19395-8&lt/isbn>
&lt/书籍>
<自行车价格=“19.95”d:price=“Number”d:mi=“21”>
<品牌d:constr=“String”d:mi=“19”>卡纳代尔&lt/品牌>
<颜色d:constr=“String”d:mi=“20”>红色&lt/颜色>
&lt/自行车>
&lt/商店>
&lt/d:数据>

使用带有父节点名称的父节点

/*[title=“50”]/parent::store

如果父节点是存储,则此XPath将仅选择父节点

但是你也可以使用其中的一个

/*[title=“50”]/parent::*
//*[title=“50”]/。。

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

编辑

在给定的示例中,如果父对象是自行车,但父对象的父对象是商店,会发生什么情况

它会上升吗

否,仅当存储是与//*[title=“50”]匹配的节点的父节点时,它才会选择该存储

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

是的,您可以使用祖先

/*[title=“50”]/consensor::store

这将选择与`存储’匹配的节点的所有祖先。例如

<数据xmlns:d=“违抗名称空间”d:mi=“23”>
<存储mi=“1”>
<存储mi=“22”>
<账面价格=“8.95”d:price=“Number”d:mi=“13”>
<标题d:constr=“String”d:mi=“10”>50&lt/标题>
<d类:constr=“String”d:mi=“11”>参考&lt/类别>
<作者d:constr=“String”d:mi=“12”>奈杰尔·里斯&lt/作者>
&lt/书籍>
&lt/商店>
&lt/商店>
&lt/数据>

发表评论