Come selezionare l'ennesimo elemento in xpath 1.0?
-
19-08-2019 - |
Domanda
Ho un po 'di XML e una query XPath. Sto usando Yahoo! widget, quindi sto usando XPath 1.0.
Ecco l'essenza del mio XML ...
<root>
<cat num="SOURCE">
<movie>
<swf>speak.swf</swf>
<width>250</width>
<height>150</height>
<colour>cccccc</colour>
</movie>
<movie>
<swf>inertia.swf</swf>
<width>380</width>
<height>130</height>
<colour>9a9a9a</colour>
</movie>
<movie>
<swf>swing.swf</swf>
<width>380</width>
<height>130</height>
<colour>9A9A9A</colour>
</movie>
....
Ora ... se eseguo questa query:
"root/cat/movie/swf"
Ottengo 42 risultati, tutti i nodi 'swf' che sono corretti.
Se, tuttavia, voglio solo il sesto, vorrei poterlo fare:
"root/cat/movie/swf[6]"
Ma ottengo un elenco contenente 0 nodi.
Stranamente, usando [1] (e nessun altro valore) si ottiene il mio elenco di tutti i 42 nodi.
Chiaramente qui mi manca qualcosa di abbastanza fondamentale. Qualcuno vede di cosa si tratta?
Soluzione
Mi chiedo se intendi:
"root/cat/movie[6]/swf"
(ottiene lo swf del sesto film)
o in alternativa:
"(root/cat/movie/swf)[6]"
(trova tutti gli elementi movie / swf e seleziona il sesto)
Quando ogni film ha esattamente un swf, i due sono gli stessi; se un film ha zero o più elementi swf, le due query sono leggermente diverse ...
Altri suggerimenti
"root/cat/movie/swf[6]"
si riferisce a ciascun sesto nodo <swf>
in "root/cat/movie"
contesto.
Hai solo un <=> nodo ciascuno.
Quello che vuoi dire è:
"root/cat/movie[6]/swf"