2012-06-14 3 views
15

Имея это (упрощенный) XML:Как выбрать несколько узлов на разных уровнях?

<?xml version="1.0" encoding="UTF-8"?> 
<kml> 
<Document> 
     <Placemark> 
      <name>Poly 1</name> 
      <Polygon> 
         <coordinates> 
          -58.40844625779582,-34.60295278618136,0 
         </coordinates> 
      </Polygon> 
     </Placemark> 
     <Placemark> 
      <name>Poly 2</name> 
      <Polygon> 
         <coordinates> 
          -58.40414334150432,-34.59992445476809,0 
         </coordinates> 
      </Polygon> 
     </Placemark> 
</Document> 
</kml> 

Как я могу выбрать название и координаты каждого Placemark? Сейчас я могу выбрать свое имя с помощью следующего выражения XPath:

//Document//Placemark//name 

Как я могу выбрать и без каких-либо других данных?

ответ

38

Вы можете использовать объединение в выражении XPath. Просто используйте оператор: |

//Document/Placemark/name | //Document/Placemark/Polygon/coordinates 

Не использовать // (потомок оси), если вам не нужно. Используя //, это также сработало бы: //name | //coordinates. Лучше, чтобы указать точный путь.

5

Использование:

/*/*/Placemark/name | /*/*/Placemark/*/coordinates 

Это указывает объединение результатов двух отдельных выражений XPath - стандарт XPath объединение оператор | используется. Выбранными являются все name элементы, которые являются дочерними элементами элемента Placemark, который является внуком верхнего элемента XML-документа, плюс все coordinates элементы, которые являются грандиозными дочерними элементами элемента Placemark, который является внуком верхнего элемента XML-документ.

Выбранные элементы входят в порядке документа (хотя ни один нормативно документ W3C не определяет порядок), что означает, что в результате оценки (обычно типа XmlNodeList) любой name элемент непосредственно с последующим его соответствующего coordinates элемента.

0

Решено: // Метка/* [само: имя или потомство :: координаты]

Смежные вопросы