2016-09-06 108 views
2

我有一個非常大的XML文件,我需要從中提取特定的信息。我需要獲取所有具有關聯子元素的節點屬性。下面是如何佈置元素的示例:由子屬性XPath查詢

<key name="Test Group"> 
    <key name="Exhibit A"> 
     <key name="Chicago"> 
     <key name="server-01-chi"> 
      <dword name="[SSH2] Port">22</dword> 
     </key> 
     <key name="server-02-chi"> 
     <dword name="[SSH2] Port">22</dword> 
     </key> 
    </key> 
    </key> 
    <key name="Exhibit B"> 
     <key name="Denver"> 
     <key name="server-01-den"> 
      <dword name="[SSH2] Port">22</dword> 
     </key> 
     <key name="server-02-den"> 
     <dword name="[SSH2] Port">22</dword> 
     </key> 
    </key> 
    </key>   
</key> 

在這種情況下,我想要獲取屬於節點屬性的服務器名稱。因此,鑑於上述XML,我需要這樣的輸出:

server-01-chi 
server-02-chi 
server-01-den 
server-02-den 
+0

但是元素''也有一個關聯的子元素,即它有一個子元素'' - 但是,你不在輸出中需要''Exhibit A''''name'屬性的值。那麼選擇你需要的數據的準則是什麼? – CiaPan

回答

3

一種選擇是,以檢索具有dword直接子的所有key元素:

//key[dword]/@name 

或者,讓有name屬性開始key元素「服務器「:

//key[starts-with(@name, "server")]/@name 

或者,也要通過所有的key父母(如果s結構是「嚴格的」)。例如,如果測試的name測試組預先知道:我

//key[@name = 'Test Group']/key/key/key/@name 

所有的表達式工作所提供的示例XML匹配的服務器名稱。