由子属性XPath查询

问题描述:

我有一个非常大的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

一种选择是,以检索具有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匹配的服务器名称。