2009-03-18 15 views
17

Ich habe einige XML und eine XPath-Abfrage. Ich benutze Yahoo! Widgets, also verwende ich XPath 1.0.Wie wählt man das n-te Element in XPath 1.0?

Hier ist der Kern meiner 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> 
     .... 

Nun ... wenn ich diese Abfrage ausführen:

"root/cat/movie/swf" 

I 42 Ergebnisse zu erhalten, werden alle Knoten 'swf', die korrekt ist .

Wenn aber ich will nur das sechste ein, würde Ich mag Lage sein, zu tun:

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

Aber ich erhalte eine Liste mit 0 Knoten.

Seltsam, mit [1] (und kein anderer Wert) ergibt meine Liste aller 42 Knoten.

Offensichtlich fehlt mir hier etwas ganz Fundamentales. Wer sieht was es ist?

Antwort

34

Ich frage mich, ob Sie nach:

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

(die SWF des 6. Film bekommt)

oder alternativ:

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

(findet alle Film/SWF-Elemente, und wählt die 6.)

Wenn jeder Film genau ein SWF hat, sind die beiden gleich; wenn ein Film null oder mehrere SWF Elemente, sie die beiden Abfragen sind leicht unterschiedliche ...

+0

ich letzteres gemeint. Vielen Dank. – izb

+7

Es ist wichtig zu beachten, dass Indizes 1-basiert sind. – AndiDog

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

bezieht sich auf jeden 6. <swf> Knoten in "root/cat/movie" Kontext.

Sie haben nur jeweils einen <swf> Knoten.

Was Sie meinen, ist:

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

Beat mich dazu :) +1 für die Erklärung – annakata

+0

Ah, natürlich :) Pesky Array-ähnliche Notation ... – izb