2016-09-06 4 views
2

У меня есть очень большой XML-файл, из которого мне нужно извлечь определенную информацию. Мне нужно захватить все атрибуты узла, которые связаны с дочерними элементами. Вот пример того, как элементы выкладываются:XPath Query by Child Attribute

<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

Но элемент '' имеет 'связанный дочерний элемент' тоже, а именно имеет дочерний элемент '' - однако вы не want '" Экспортировать A "значение своего атрибута name в выводе. Так что же такое правило выбора данных, которое вам нужно? – CiaPan

ответ

3

Одним из вариантов было бы получить все key элементы, имеющие dword прямого ребенка:

//key[dword]/@name 

Или, получить key элементы, которые имеют name атрибут, начиная с " сервер ":

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

Или пройти через все key родителей, а также (если с структура является «строгой»). Например, если name испытания опытной группы известна заранее:

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

Все выражения работают для меня на поставленном образце XML сопоставления имен серверов.