2011-01-21 17 views
7

xml nuevo ..XPath - obtener 10 primeros elementos de conjunto seleccionado

Quiero seleccionar un subconjunto de nodos (con fines de paginación) a partir de un conjunto.

$nodes = $xml->query(//parent 
         /child[sex = 'male' 
           and position() >= 10 
           and position() < 21]); 

Si no me equivoco, solo seleccionaría niños varones que sean del 10º al 20º niño.

lo que necesito es seleccionar el primer 10-20 (o 30-40) hombres en el conjunto ...

seguro de que estoy siendo un novato y he hecho esto antes, pero su viernes ...

asoma

ta

+0

Buena pregunta, 1.Vea mi respuesta para la explicación del problema y una solución simple y breve con explicación paso a paso. :) –

Respuesta

22

tienen la condición en la posición de operación nodeset resultado de su condición inicial:

//parent/child[sex='male'][position() >= 10 and position() < 21] 
+0

+1 Respuesta correcta, pero no hay necesidad de paréntesis –

+0

Jeebuzz - perdón por oscurecer su puerta ... sabía que era simple. tvm –

+0

No hay problema :), gracias Alejandro por la corrección –

6

quiero Selec t un subconjunto de nodos ( para fines de paginación) de un conjunto.

$nodes = $xml->query(//parent 
         /child[sex = 'male' 
           and position() >= 10 
           and position() < 21]); 

Si no me equivoco que sólo hijos varones selectos que son el 10 y el 20 de niño.

lo que necesito es seleccionar el primer 10-20 (o 30-40) hombres en el conjunto ...

Usted está equivocada ...

//parent/child 
      [sex = 'male' 
      and 
      position() >= 10 
      and 
      position() < 21 
      ] 

Selecciona todos los elementos child (de cualquier elemento parent en el documento XML) que tengan un hijo sex con el valor de picadura "male" y que sean uno de los 10 del 20 al child hijos de sus padres.

Podría haber solo unos pocos elementos, o incluso ninguno.

Lo que queremos es:

  1. Selecciona todos child elementos (de cualquier elemento parent en el documento XML) que tienen un niño sex con valor picadura "male"

  2. De los seleccionados en el paso 1 anterior, seleccione solo aquellos en la posición 10 a 20

Así, para el paso 1:

//parent/child[sex = 'male'] 

y añadiendo el paso 2:

//parent/child[sex = 'male'] 
       [position() >= 10 
       and 
       not(position() > 20 
       ] 
Cuestiones relacionadas