我已经发布了示例XML和预期输出,有助于获得结果。如何使用xpath获取具有属性的父元素
示例XML
<root>
<A id="1">
<B id="2"/>
<C id="2"/>
</A>
</root>
预期输出:
<A id="1"/>
我已经发布了示例XML和预期输出,有助于获得结果。如何使用xpath获取具有属性的父元素
示例XML
<root>
<A id="1">
<B id="2"/>
<C id="2"/>
</A>
</root>
预期输出:
<A id="1"/>
的是,你在找什么?
//*[@id='1']/parent::*
,类似//*[@id='1']/../
,如果你想验证父
是根:
//*[@id='1']/parent::root
https://en.wikipedia.org/wiki/XPath ,如果你需要的不只是父母 - 但也有一些属性的一个元素:了解轴符并使用Axis“ancestor ::”=)
您能否提供我期望的结果()..谢谢.. – Antony
你可以用几种方式制定这个查询:
个具有匹配属性查找元素,只有上升的所有时间:
//*[@id=1]
找到属性,则上升了一步:
//@id[.=1]/..
使用fn:id($id)
功能,给该文件被验证并且ID属性被如此定义:
/id('1')
您能否提供我期望的结果()..谢谢.. – Antony
我认为这是不可能的。如果没有孩子使用XPATH,就没有办法选择一个节点(这意味着它总是会返回节点B和C)
您可以使用XQuery来实现这一点,我不确定这是否是您但是这里有一个例子,您可以根据存储在$doc
变量中的现有节点创建新节点。
declare variable $doc := <root><A id="1"><B id="2"/><C id="2"/></A></root>;
element {fn:node-name($doc/*)} {$doc/*/@*}
以上返回<A id="1"></A>
。
这个答案解决了我认为是有意的问题,但是可能不会推广。也许第二行应该是'for $ el in $ doc // * [@ id =“1”] return element {fn:node-name($ el)} {$ el/@ *}' – BenW
您需要的父元素? –
是的@vitally ... – Antony
好的,回答,@antony –