Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

450
Vistas
Xpath: ¿Cómo combinar estos dos nodos secundarios para obtener el nodo principal?

Soy nuevo en XPath y estoy confundido. ¿Cualquiera puede echar un vistazo rápido y ver qué está mal en mi sintaxis?

Estoy tratando de seleccionar todos los div's secundarios directos de id="list-overview" que tiene dos nodos secundarios en algún lugar de su árbol que contienen data-price<=20 y a div containing "Orange" text

 let xy = $x(`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20]][./div/a/div/div[@class='fruit'][contains(.,'Orange')]])`)

para romperlo He probado estos dos por separado y funcionaron.

 `//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20]]`
 `//*[@id="list-overview"]/div[./div/a/div/div[@class='fruit'][contains(.,'Orange')])]`

Parece que no puedo combinarlos de alguna manera y no estoy seguro de lo que estoy haciendo mal.

EDITAR:

Probé las sugerencias y el siguiente xpath ya no arroja una excepción. Pero devuelve una matriz vacía mientras hay elementos que coinciden con el precio <20 y fruit="Orange"

 $x(`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20] and ./div/div/a/div/div[@class='fruit'][contains(.,'Orange')]]`)
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Si entiendo tu idea, te falta lo lógico and entre estas 2 condiciones. Corregí la expresión XPath en consecuencia. Por favor, intente esto:

 let xy = $x(`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20] and ./div/a/div/div[@class='fruit'][contains(.,'Orange')]])`)

UPD
Por favor, intente esto:

 let xy = $x(`//*[@id="list-overview"]/div[.//div[@data-price<=20] and .//div[@class='fruit'][contains(.,'Orange')]])`)
about 4 years ago · Juan Pablo Isaza Denunciar

0

En lugar de esto

 $x(//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20]][./div/a/div/div[@class='fruit'][contains(.,'Orange')]]))

Podrías hacer esto para combinar ambos,

unir estrechamente tanto al niño

 $x(//*[@id="list-overview"]/div[./descendant::div[@data-price<=20]] and [./div/a/div/div[@class='fruit'][contains(.,'Orange')]])

o tener uno de ellos y aun así desearía continuar.

 $x(//*[@id="list-overview"]/div[./descendant::div[@data-price<=20]] or [./div/a/div/div[@class='fruit'][contains(.,'Orange')]])

Además, he incluido descendant para que sea más legible.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda