XPath:从子节点获取父节点

我需要得到父节点的子节点“标题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">JRR 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> 

parent轴与父节点的名称一起使用。

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

这个XPath只会select父节点,如果它是一个store

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

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

这些xpath将select任何父节点。 所以,如果文档发生变化,您将始终select一个节点,即使它不是您期望的节点。

编辑

在父母是自行车的情况下,父母的父母是商店的情况下会发生什么?

它是否上升?

不,如果它是匹配//*[title="50"]的节点的父节点,则仅select该商店。

如果没有,有没有办法在这种情况下上升,如果没有这样的父母,返回没有?

是的,你可以使用ancestor

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

这将select与store相匹配的节点的所有祖先。 例如

 <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选择结果

作为一种select,你可以使用ancestor

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

它比parent更强大,因为它甚至可以得到祖父母或祖父母