2012-06-14 16 views
15

Mając to (uproszczony) XML:Jak wybrać wiele węzłów na różnych poziomach?

<?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> 

Jak mogę wybrać nazwę i współrzędne każdego oznaczenia miejsca? Teraz mogę wybrać swoją nazwę z następującego wyrażenia XPath:

//Document//Placemark//name 

jaki sposób można wybrać zarówno bez żadnych innych danych?

Odpowiedz

38

Możesz używać unii w wyrażeniu XPath. Wystarczy użyć operatora: |

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

Nie używaj // (potomek oś), jeśli nie trzeba. Korzystanie z //, to również działa: //name | //coordinates. Lepsze pod względem wydajności określenie dokładnej ścieżki.

5

Zastosowanie:

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

Określa unii z wynikami dwóch odrębnych wyrażeń XPath - średnia operator union XPath | służy. Wybrane są wszystkie elementy name, które są elementami potomnymi elementu Placemark, który jest wnukiem najwyższego elementu dokumentu XML, oraz wszystkie elementy coordinates, które są grand-dziećmi elementu Placemark, który jest wnukiem górnego elementu elementu Dokument XML.

Wybrane elementy są w kolejności dokumentu (chociaż nie dokumencie normatywnym W3C określa kolejność), co oznacza, że ​​w wyniku oceny (zwykle typu XmlNodeList) każdy element name następuje bezpośrednio przez odpowiadający mu coordinates elementu.

0

Rozwiązane: // Oznaczenie miejsca/* [nazwa własna :: lub potomek :: współrzędne]

Powiązane problemy