2012-06-14 37 views
15

Avendo questo (semplificato) XML:Come selezionare più nodi in diversi livelli?

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

Come posso selezionare il nome e le coordinate di ogni segnaposto? In questo momento posso selezionare il loro nome con la seguente espressione XPath:

//Document//Placemark//name 

Come posso selezionare sia senza altri dati?

risposta

38

È possibile utilizzare un'unione nell'espressione XPath. Basta usare l'operatore: |

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

Non utilizzare il (discendente asse ) // se non è necessario. Utilizzando //, questo funzionerebbe anche: //name | //coordinates. È meglio, in termini di prestazioni, specificare il percorso esatto.

5

Uso:

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

Specifica il unione dei risultati di due espressioni XPath separati - l'operatore XPath unione di serie | viene utilizzato. Sono selezionati tutti gli elementi name figli di un elemento Placemark che è un nipote dell'elemento superiore del documento XML, più tutti gli elementi coordinates che sono nipoti di un elemento Placemark che è un nipote dell'elemento superiore del Documento XML.

Gli elementi selezionati sono nell'ordine dei documenti (anche se nessun documento W3C normativo specifica l'ordine), il che significa che nel risultato della valutazione (solitamente di tipo XmlNodeList) qualsiasi elemento name è direttamente seguito dalla sua corrispondente coordinates elemento.

0

Risolto: // Segnaposto/* [auto :: nome o discendente :: coordinate]

Problemi correlati