2009-03-18 9 views
17

Ho alcune query XML e XPath. Sto usando Yahoo! widget, quindi sto usando XPath 1.0.Come selezionare l'ennesimo elemento in xpath 1.0?

Ecco il succo della mia 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 eseguita questa interrogazione:

"root/cat/movie/swf" 

ottengo 42 risultati, i nodi tutte le esigenze degli swf 'che è corretto .

Se, tuttavia, voglio solo il 6 ° uno, mi piacerebbe essere in grado di fare:

"root/cat/movie/swf[6]" 

Ma ho una lista contenente 0 nodi.

Stranamente, l'utilizzo di [1] (e nessun altro valore) restituisce il mio elenco di tutti i 42 nodi.

Chiaramente mi manca qualcosa di fondamentale qui. Qualcuno capisce di cosa si tratta?

risposta

34

Mi chiedo se si intende:

"root/cat/movie[6]/swf" 

(ha l'swf del 6 ° film)

o in alternativa:

"(root/cat/movie/swf)[6]" 

(trova tutti gli elementi di film/swf, e seleziona il sesto)

Quando ogni film ha esattamente uno swf, i due sono uguali; se un film ha zero o più elementi SWF, che le due domande sono leggermente differenti ...

+0

ho significava la seconda. Grazie. – izb

+7

È importante notare che gli indici sono basati su 1. – AndiDog

9
"root/cat/movie/swf[6]" 

riferisce a ciascun 6a <swf> nodo "root/cat/movie" contesto.

Si dispone di un solo nodo <swf> ciascuno.

Quello che intendo dire è:

"root/cat/movie[6]/swf" 
+0

mi ha battuto :) +1 per la spiegazione – annakata

+0

Ah, ovviamente :) Notazione tipo array pesky ... – izb

Problemi correlati