我需要为子节点获取父节点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”>;荣誉之剑</标题>;
<;d类:constr=“String”d:mi=“2”>;小说</类别>;
<;作者d:constr=“String”d:mi=“3”>;伊夫林·沃</作者>;
</书籍>;
<;账面价格=“8.99”d:price=“Number”d:mi=“9”>;
<;标题d:constr=“String”d:mi=“5”>;白鲸</标题>;
<;d类:constr=“String”d:mi=“6”>;小说</类别>;
<;作者d:constr=“String”d:mi=“7”>;赫尔曼·梅尔维尔</作者>;
<;isbn d:constr=“String”d:mi=“8”>;0-553-21311-3</isbn>;
</书籍>;
<;账面价格=“8.95”d:price=“Number”d:mi=“13”>;
<;标题d:constr=“String”d:mi=“10”>;50</标题>;
<;d类:constr=“String”d:mi=“11”>;参考</类别>;
<;作者d:constr=“String”d:mi=“12”>;奈杰尔·里斯</作者>;
</书籍>;
<;账面价格=“22.99”d:price=“Number”d:mi=“18”>;
<;标题d:constr=“String”d:mi=“14”>;指环王</标题>;
<;d类:constr=“String”d:mi=“15”>;小说</类别>;
<;作者d:constr=“String”d:mi=“16”>;J.R.R.托尔金</作者>;
<;isbn d:constr=“String”d:mi=“17”>;0-395-19395-8</isbn>;
</书籍>;
<;自行车价格=“19.95”d:price=“Number”d:mi=“21”>;
<;品牌d:constr=“String”d:mi=“19”>;卡纳代尔</品牌>;
<;颜色d:constr=“String”d:mi=“20”>;红色</颜色>;
</自行车>;
</商店>;
</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</标题>;
<;d类:constr=“String”d:mi=“11”>;参考</类别>;
<;作者d:constr=“String”d:mi=“12”>;奈杰尔·里斯</作者>;
</书籍>;
</商店>;
</商店>;
</数据>;