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>
作为一种select,你可以使用ancestor
。
//*[title="50"]/ancestor::store
它比parent
更强大,因为它甚至可以得到祖父母或祖父母