Xml XPath:从子节点获取父节点
我需要为子节点获取父节点Xml XPath:从子节点获取父节点,xml,xpath,Xml,Xpath,我需要为子节点获取父节点title 50 目前我只使用 //*[title="50"] 我怎样才能得到它的父母? 结果应该是存储节点 荣誉之剑 小说 伊芙琳·沃 白鲸 小说 赫尔曼·梅尔维尔 0-553-21311-3 50 参考 检控官里斯 指环王 小说 托尔金 0-395-19395-8 卡纳代尔 红色 将与父节点的名称一起使用 //*[title="50"]/parent::store 如果父节点是存储,则此XPath将仅选择父节点 但是你也可以使用其中的一个 //*[title=
title 50
目前我只使用
//*[title="50"]
我怎样才能得到它的父母?
结果应该是存储
节点
荣誉之剑
小说
伊芙琳·沃
白鲸
小说
赫尔曼·梅尔维尔
0-553-21311-3
50
参考
检控官里斯
指环王
小说
托尔金
0-395-19395-8
卡纳代尔
红色
将与父节点的名称一起使用
//*[title="50"]/parent::store
如果父节点是
存储
,则此XPath将仅选择父节点
但是你也可以使用其中的一个
//*[title="50"]/parent::*
//*[title="50"]/..
这些XPath将选择任何父节点。因此,如果文档发生更改,您将始终选择一个节点,即使它不是您期望的节点
编辑
在给定的示例中,如果父对象是自行车,但父对象的父对象是商店,会发生什么情况
它会上升吗
否,仅当存储是与//*[title=“50”]
匹配的节点的父节点时,它才会选择该存储
如果没有,是否有一种方法在这种情况下提升,如果没有这样的父母,则返回None
是的,您可以使用祖先
轴
//*[title="50"]/ancestor::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>
50
参考
作为替代,您可以使用祖先
//*[title="50"]/ancestor::store
它比父母更强大,因为它甚至可以得到祖父母或曾祖父母这在我的情况下有效。我希望你能从中提取意义
//div[text()='building1' and @class='wrap']/ancestor::tr/td/div/div[@class='x-grid-row-checker']
你也可以用表达式末尾的两点。请参见此示例:
//*[title="50"]/..
对老问题的新的、改进的回答…
我怎样才能得到它的父母?结果应该是存储
节点
使用谓词而不是父::
或祖先::
轴
这里的大多数答案选择标题
,然后遍历到目标父级或祖先(存储
)元素。一种更简单、直接的方法是首先直接选择父元素或祖先元素,避免了遍历到父元素:
或祖先:
轴:
//*[book/title = "50"]
如果中间元素的名称不同:
//*[*/title = "50"]
或者,在名称和深度上:
//*[.//title = "50"]
您还可以使用父级::*
缩写语法。
(示例:/*[title=“50”]/..
)或嵌套谓词(示例:/*[*[title=“50”]]
)附加信息:和或与快捷方式相对应的父级::节点()
。
,在我看来更好。事实上,父节点::*
仅限于axis的主节点类型,在大多数情况下这不是问题。如果您使用的是try.xpath(“…”)
或xpath('parent::node()')
“此xpath将仅选择父节点(如果它是存储)。”-在给定示例中,如果父对象是bicycle
,但父对象的父对象是store
,会发生什么情况?它会上升吗?如果没有,是否有一种方法在这种情况下提升并返回None
如果没有这样的父级?它不是“更强大”。只是不同而已。因此,轴的选择取决于用例。这并不能回答问题。作者不一定提前知道家长的名字。@KennSebesta:我已经更新了答案以解决您的问题。如果您的反对意见已经得到解决,请取消您的否决票,或者如果您觉得答案仍然有问题,请告诉我。谢谢
//*[.//title = "50"]