2010-04-14 21 views
35

¿Cómo puedo ignorar el primer elemento y obtener el resto de los elementos?Cómo ignorar el primer elemento en xpath

<ul> 
    <li><a href="#">some link</a></li> 
    <li><a href="#">some link 2</a></li> 
    <li><a href="#">link i want to find</a></li> 
</ul> 

Gracias

+1

¿Puedes definir qué es el "primer elemento"? Del ejemplo XML, el primer elemento es 'ul', o si quiere decir que' ul' el primer elemento es 'li', o ¿desea seleccionar todos los elementos' a' y luego omitir el primero? –

+0

Quiero ignorar primero li. – priyank

Respuesta

70

si desea ignorar el elemento de "primera" sólo entonces:

//li[position()>1] 
or 
(//a)[position()>1] 

si desea que la última solamente (como su ejemplo parece sugerir):

//li[last()] 
or 
(//a)[last()] 
+3

Recuerde que los índices en XPath están basados ​​en 1, no en 0. Entonces la expresión 'a [position()> 1]' devuelve todos los elementos 'a' excepto el primero. –

+0

position() devuelve la posición del elemento de contexto. En el XPATH provisto, la posición de cada 'a 'sería igual a 1 AND last() y devolverá cada uno de los elementos' a', sin saltearse el primero. –

+1

Para que 'position()' evalúe como se espera, debe ajustar la selección de elementos entre paréntesis para agruparlos en un conjunto de nodos y * luego * aplicar el filtro de predicados en la posición (es decir, ('// a) [position()> 1] 'and' (// a) [last()] ') –

10

Puede usar position() para omitir el "primero", pero dependiendo de qué elemento Si estás interesado y cuál es el contexto, es posible que necesites una pequeña variación en tu XPATH.

Por ejemplo, si usted quiere hacer frente a todas las li elementos y obtener todos excepto el primero, se puede utilizar:

//li[position()>1] 

y que iba a funcionar como se espera, volviendo todos los li elementos a excepción de el primero.

Sin embargo, si desea abordar todos los elementos a, necesita modificar ligeramente el XPATH. En el contexto de la expresión //a[position()>1], cada uno de los elementos a tendrá un position() de 1 y last() se evaluará como verdadero. Por lo tanto, siempre devolvería cada a y no saltaría el primero.

Debe envolver la expresión que selecciona el a entre paréntesis para agruparlos en un conjunto de nodos, luego aplicar el filtro de predicados en la posición.

(//a)[position()>1]

Como alternativa, también se puede utilizar una expresión como la siguiente:

//a[preceding::a] 

que encontrará todos los elementos a excepto el primero (ya que no hay a que precede a la primera).

Cuestiones relacionadas