2017-06-01 114 views

回答

0

的是,你在找什麼?

//*[@id='1']/parent::*,類似//*[@id='1']/../,如果你想驗證父

是根:

//*[@id='1']/parent::root 

https://en.wikipedia.org/wiki/XPath ,如果你需要的不只是父母 - 但也有一些屬性的一個元素:瞭解軸符並使用Axis「ancestor ::」=)

+0

您能否提供我期望的結果()..謝謝.. – Antony

3

你可以用幾種方式制定這個查詢:

  • 具有匹配屬性查找元素,只有上升的所有時間:

    //*[@id=1] 
    
  • 找到屬性,則上升了一步:

    //@id[.=1]/.. 
    
  • 使用fn:id($id)功能,給該文件被驗證並且ID屬性被如此定義:

    /id('1') 
    
+0

您能否提供我期望的結果()..謝謝.. – Antony

+0

您無法得到您要求的確切結果,因爲所有XML元素都必須被關閉。所以最好你可以得到''。看來我(和其他人)錯誤地理解了這個問題。關於如何選擇結果的規則是什麼? –

2

我認爲這是不可能的。如果沒有孩子使用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>

+0

這個答案解決了我認爲是有意的問題,但是可能不會推廣。也許第二行應該是'for $ el in $ doc // * [@ id =「1」] return element {fn:node-name($ el)} {$ el/@ *}' – BenW

相關問題