2013-03-06 173 views
4

我需要編寫2個xpath查詢,其中一個從元素的直接父元素中選擇所有父元素的特定元素到根,然後我將能夠選擇元素的某些特定屬性。xpath選擇所有的父母和所有的孩子

另一個選擇元素的所有孩子,不管他們在哪裏。

例如,如果XML文檔是一樣的東西:

<role key='total-admin'> 
    <role key='security-admin'> 
     <role key='users-admin'> 
      <role key='add-user'></role> 
      <role key='delete-user'></role> 
      <role key='deactivate-user'></role> 
     </role> 
    </role> 
</role> 
  1. 我想選擇與關鍵「添加用戶」。結果元素的所有家長會:

    [ 'users-admin' , 'security-admin' , 'total-admin' ] 
    
  2. 我想選擇'安全管理員'的所有孩子。其結果必然是:

    [ 'users-admin' , 'add-user' , 'delete-user' , 'deactivate-user' ] 
    

回答

7

對於第一個查詢中使用:

//role[@key = 'add-user']/ancestor::* 

對於第二個:

//role[@key = 'security-admin']//* 
3

你總是有你定義爲一個上下文節點具有特定屬性值的元素,例如"add-user""security-admin"

//*[@key = "string"] 

由於這給你一個節點集的上下文節點表達需要排除這種類型的所有非單元素:

//*[@key = "string" and count(//*[@key = "string"]) = 1] 

這解決了您的上下文的需要節點。然後,您可以使用.來表示該情景節點,也可以逐字寫入。

選擇等背景元素的所有的父母,祖父母,盛大祖父母(也就是祖先軸):

./ancestor::* 
//*[@key = "string" and count(//*[@key = "string"]) = 1]/ancestor::* 

選擇所有兒童(即後代軸):

./descendant::* 
.//* 
//*[@key = "string" and count(//*[@key = "string"]) = 1]/descendant::* 
//*[@key = "string" and count(//*[@key = "string"]) = 1]//* 
相關問題