Bonjour,

Je connais à peine XPath/XQuery/CSS, et je tente d'apprendre à utiliser soit Xidel soit XMLStartlet pour manipuler des fichiers XML en ligne de commande.

Dans le XML suivant, j'ai besoin de 1) récupérer tous les élements <trkpt> et leur contenu afin de 2) les fusionner en un seul segment (trkseg) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="UTF-8"?>
<gpx>
  <metadata>
    <name>Some name</name>
  </metadata>
  <trk>
    <name>Track 1</name>
    <trkseg>
      <trkpt lat="48.81782" lon="2.24906">
        <ele>37.5</ele>
      </trkpt>
      <trkpt lat="48.81784" lon="2.24906">
        <ele>37.5</ele>
      </trkpt>
    </trkseg>
  </trk>
  <trk>
    <name>Track 2</name>
    <trkseg>
      <trkpt lat="48.81782" lon="2.24906">
        <ele>37.5</ele>
      </trkpt>
      <trkpt lat="48.81784" lon="2.24906">
        <ele>37.5</ele>
      </trkpt>
    </trkseg>
  </trk>
</gpx>
La commande suivante ne renvoie que les textes des éléments :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
xidel.exe input.gpx --extract "//trk/trkseg"
Peut-être faut-il utiliser la commande node() quelque part ?

C'est sans doute très simple quand on connait, mais…

Merci pour toute aide.

Nom : 0E206A53-74CE-470D-91FB-E55AD7E95AB1.png
Affichages : 119
Taille : 11,7 Ko

---
Edit: Still nogo…

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
xidel -s input.gpx -e "//trk/trkseg"
xidel -s input.gpx -e "//*[contains(text(), 'trkpt')]
xidel -s input.gpx -e "//*[contains(node(), 'trkpt')]
xidel -s input.gpx -e "//*[contains(local-name(), 'tkrpt')]
xidel -s input.gpx -e "//*[contains(name(), 'trkpt')]
---
Edit: Par défaut, les éléments eux-même sont ignorés en sortie

Code : Sélectionner tout - Visualiser dans une fenêtre à part
xidel input.gpx -e "//trkseg/*/outer-xml(.)"