2011-02-10 13 views
6

Tengo una colección de elementos div que tienen la clase media-gallery-item.
Me gustaría seleccionar el número de elemento x.Combinar el predicado XPATH con la posición

Cuando acaba de seleccionar todos los artículos, me sale 5 resultados

$x("//div[@id='content-area']//div[@class='media-gallery-item']") 

Ahora yo quiero ser capaz de seleccionar el elemento número 2, pero no puedo encontrar la manera de combinar los dos correctamente:

$x("//div[@id='content-area']//div[@class='media-gallery-item'][2]") 

$x("//div[@id='content-area']//div[@class='media-gallery-item' 
            and position() = 2]") 

Sé que esto no tiene mucho sentido ya que no es un AND real, sino más bien como "filtro de acuerdo con esto primero, luego seleccione el segundo partido". El objetivo de esto es mantener las cosas en la selección (por ejemplo, en el segundo elemento, me href el atributo del elemento a)

+0

Sólo el primer duplicado encontró [¿Cómo se seleccionan los últimos N elementos con XPath?] (Http://stackoverflow.com/questions/458596/how-do-i-select-the- last-n-elements-with-xpath) –

+0

Eso no es un duplicado. Quiero una posición específica y combinarla con otro predicado. La otra publicación quiere los últimos n elementos (ningún otro predicado, posición no exacta) –

Respuesta

10

respuesta Paso a paso.

Para seleccionar elementos con un ancestro div[@id='content-area'], que son las segundas childs de sus respectivos padres utilizan:

//div[@id='content-area']//div[2] 

Para seleccionar segundos (en orden documento) div elemento con un uso div[@id='content-area'] antepasado:

(//div[@id='content-area']//div)[2] 

Anota la diferencia.

Luego, para seleccionar elementos, que son segundo niño de sus respectivos padres, siempre que tengan una clase '-galería-elemento multimedia' uso:

//div[@id='content-area']//div[2][@class='media-gallery-item'] 

Para seleccionar elementos, que son el segundo de aquellos del niño (de sus respectivos padres) que tienen una clase media-gallery-item:

//div[@id='content-area']//div[@class='media-gallery-item'][2] 

Para seleccionar segundos (en el orden del documento) div elemento con un ancestro div[@id='content-area'], siempre que tenga media-gallery-item clase:

(//div[@id='content-area']//div)[2][@class='media-gallery-item'] 

Para seleccionar segundos (en el orden del documento) de todo div elemento con un ancestro div[@id='content-area'] y una clase media-gallery-item:

(//div[@id='content-area']//div)[@class='media-gallery-item'][2] 

Spec cita según lo sugerido por @Alejandro:

Un predicado filtra un conjunto de nodos con con respecto a un eje para producir un nuevo conjunto de nodos.Para cada nodo en el conjunto de nodos a filtrar, la PredicateExpr se evalúa con que nodo como nodo de contexto, con el número de nodos en el conjunto de nodos como el tamaño contexto , y con la posición de proximidad del nodo en el conjunto de nodos con respecto al eje como la posición contexto

http://w3.org/TR/xpath/#predicates

la posición de proximidad de un miembro de un conjunto de nodos con respecto a un eje es definido como la posición del nodo en el conjunto de nodos ordenado en el documento pedido si el eje es un eje hacia adelante y ordenado en orden de documento inverso si el eje es un revés eje

http://w3.org/TR/xpath/#dt-proximity-position

el fondo es que el predicado posición trabaja con respecto al eje. Y necesita paréntesis para declarar explícitamente la prioridad. Por lo tanto, no es el eje child, pero se considerará el conjunto de nodos después de resolver el eje descendant-or-self al calcular la posición.

+0

Buena respuesta, +1 –

+1

@Alejandro, citas familiares ahora :) Las añadiré a la respuesta. – Flack

+0

¡Ahora es una respuesta completa! –

0

Resulta que: el paréntesis!

(//div[@id='content-area']//div[@class='media-gallery-item'])[2] 

obras

+0

También puede verificar mi respuesta para un análisis completo. – Flack

0

Parece que sus atributos de acceso son incorrectos. Trate de usar

/div[@id='content-area' and @class='media-gallery-item'][2] 
Cuestiones relacionadas