Avoir ce XML (simplifié):
<?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>
Comment sélectionner le nom et les coordonnées de chaque repère? À l'heure actuelle, je peux sélectionner leur nom avec l'expression XPath suivante:
//Document//Placemark//name
Comment puis-je sélectionner les deux sans autres données?
Vous pouvez utiliser une union dans votre expression XPath. Il suffit d'utiliser l'opérateur: |
//Document/Placemark/name | //Document/Placemark/Polygon/coordinates
N'utilisez pas le //
( descendant axis) si vous n'en avez pas besoin. Avec //
, cela fonctionnerait aussi: //name | //coordinates
. Il est préférable, en termes de performances, de spécifier le chemin exact.
Utilisation :
/*/*/Placemark/name | /*/*/Placemark/*/coordinates
Ceci spécifie l'union union des résultats de deux expressions XPath distinctes - l'opérateur d'union XPath standard |
est utilisé. Sont sélectionnés tous les éléments name
qui sont les enfants d'un élément Placemark
qui est un petit-enfant de l'élément supérieur du document XML, plus all coordinates
qui sont les petits-enfants d'un élément Placemark
qui est un petit-enfant du élément supérieur du document XML.
Les éléments sélectionnés sont classés par ordre de document (bien qu'aucun document normatif du W3C ne spécifie cet ordre), ce qui signifie que dans le résultat de l'évaluation (généralement de type XmlNodeList), tout élément name
est directement suivi de l'élément coordinates
correspondant.
Résolu: // Placemark/* [self :: nom ou descendant :: coordonnées]