2016-03-17 2 views
1

Я хотел бы найти значение в узлах, а затем выполнить возврат к неизвестному количеству уровней другому узлу.xpath: поиск «вниз», а затем назад «вверх»

Например, я бы хотел найти имена всех корпораций, которые находятся во Франции или имеют филиал во Франции. Дочерние компании могут быть вложены в несколько уровней.

Я знаю, что может пройти с

//location[text() = 'France']/.. 

, но что, если я хочу, чтобы обход, пока я не добраться до конкретного узла?

<?xml version="1.0" encoding="UTF-8"?> 
<catalog> 
    <corporation> 
     <name>Fromage Sarl</name> 
     <location>France</location> 
    </corporation> 
    <corporation> 
     <name>Cheese Inc</name> 
     <location>USA</location> 
     <subsidiary> 
     <name>Yankee Imports</name> 
     <location>France</location> 
     </subsidiary> 
    </corporation> 
</catalog> 

ответ

2

Это XPath:

//corporation[location = 'France' or .//subsidiary/location = 'France']/name 

выбирает все corporation/name во всем документе только для тех corporation с, у которых есть ребенок location='France' или любой потомок subsidiary/location = 'France'

Выходные выбраны узлы должны быть:

<name>Fromage Sarl</name> 
<name>Cheese Inc</name>