2009-03-18 13 views
17

J'ai des requêtes XML et XPath. J'utilise Yahoo! widgets, donc j'utilise XPath 1.0.Comment sélectionner le nième élément dans xpath 1.0?

est ici l'essentiel de mon 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> 
     .... 

Maintenant ... si je lance cette requête:

"root/cat/movie/swf" 

Je reçois 42 résultats, tous les noeuds 'swf' qui est correct .

Si cependant, je veux juste le 6-là, je voudrais pouvoir faire:

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

Mais je reçois une liste contenant 0 nœuds. Bizarrement, en utilisant [1] (Et aucune autre valeur) donne ma liste des 42 nœuds.

De toute évidence, il me manque quelque chose de fondamental ici. Quelqu'un voit ce que c'est?

Répondre

34

Je me demande si vous voulez dire:

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

(obtient le swf du 6ème film)

ou bien:

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

(retrouve tous les éléments d'animation/swf, et sélectionne le 6ème)

Lorsque chaque film a exactement un swf, les deux sont les mêmes; si un film a zéro ou plusieurs éléments swf, ils les deux requêtes sont subtilement différentes ...

+0

que je voulais dire ce dernier. Merci. – izb

+7

Il est important de noter que les indices sont basés sur 1. – AndiDog

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

fait référence à chaque noeud 6 <swf> dans "root/cat/movie" contexte. Vous n'avez qu'un seul nœud <swf> chacun.

Qu'est-ce que vous voulez dire est:

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

battu moi à :) :) +1 pour l'explication – annakata

+0

Ah, bien sûr :) Pesky tableau comme notation ... – izb