2009-03-18 7 views
17

Tengo algo de XML y una consulta XPath. Estoy usando Yahoo! widgets, entonces estoy usando XPath 1.0.¿Cómo seleccionar el enésimo artículo en xpath 1.0?

Aquí es la esencia de mi 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> 
     .... 

Ahora ... si me funciono con esta pregunta:

"root/cat/movie/swf" 

consigo 42 resultados, todos los nodos 'swf', que es correcta .

Si, no obstante, sólo quiero el 6 de uno, me gustaría ser capaz de hacer:

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

Pero consigo una lista que contiene 0 nodos.

Extrañamente, el uso de [1] (y ningún otro valor) produce mi lista de los 42 nodos.

Claramente me falta algo fundamental aquí. ¿Alguien ve lo que es?

Respuesta

34

Me pregunto si usted quiere decir:

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

(obtiene el swf de la sexta película)

o alternativamente:

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

(busca todos los elementos de la película/SWF y selecciona el 6º)

Cuando cada película tiene exactamente un swf, las dos son iguales; si una película tiene cero o varios elementos SWF, que las dos consultas son sutilmente diferentes ...

+0

Me refería a la última. Gracias. – izb

+7

Es importante tener en cuenta que los índices están basados ​​en 1. – AndiDog

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

se refiere a cada una sexta <swf> nodo en "root/cat/movie" contexto.

Tiene un solo nodo <swf> cada uno.

Lo que quieren decir es:

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

me gano :) +1 para la explicación – annakata

+0

Ah, por supuesto :) Pesky array-notación similar ... – izb

Cuestiones relacionadas