我已經發布了示例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 –