Xpath Seleccione el nodo hasta la etiqueta

¿Cómo seleccionar todos los nodos p hasta un nodo div?

<div>
 <div>blbaba</div>
 <p>a</p>
 <p>b</p>
 <p>c</p>
 <p>d</p>
 <div>blbaba</div>
 <p>e</p>
 <p>f</p>
 <p>g</p>
 <p>h</p> 
 <div>blbaba</div>
</div>

quiero a,b,c,d o e,f,g,h probé algo como: //div/following::p[preceding-sibling::div[1]]

preguntado el 12 de junio de 12 a las 09:06

2 Respuestas

Uso:

/div/div/following::p[count(preceding::div) = 1]

para obtener p después 1st div y antes de la 2nd. Reemplazar 1 en expresión con 2 para seleccionar p después 2nd div y antes de la 3rd.

Respondido el 12 de junio de 12 a las 10:06

si mi nodo actual es el segundo div y quiero efgh, esto no funciona porque count(preceding::div) = 1 obtiene el primer div y no el siguiente div - zedouard

//div/following-sibling::p[preceding::div] debería conseguirte todas las p's (a,b,c,d, e,f,g,h) Si los div contienen texto diferente, puede agregar algunas condiciones. Por ejemplo, obtener solo a,b,c,d en el siguiente ejemplo sería://div[text()='a']/following-sibling::p[preceding::div]

O si tiene alguna clase, categoría o cualquier otra cosa que pueda diferenciar los div (como la clase en el ejemplo): //div[@class='peach']/following-sibling::p[preceding::div]

<div>
 <div class='peach'>a</div>
 <p>a</p>
 <p>b</p>
 <p>c</p>
 <p>d</p>
 <div id='abc_123132' >b</div>
 <p>e</p>
 <p>f</p>
 <p>g</p>
 <p>h</p>
 <div>c</div>
</div>

El último ejemplo sería que su código se genera automáticamente y solo conoce parte de algún atributo para el div. En el ejemplo anterior, puede seleccionar e,f,g,h así:

//div[contains(@id,'abc')]/following-sibling::p[preceding::div] obtiene todos los hermanos p que están después de un div con id que contiene 'abc' y precede a otro div

Respondido el 12 de junio de 12 a las 12:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.