necesita una biblioteca javascript o jquery para convertir xpath a formato CSS3 seleccionable en jquery

StackOverflow https://stackoverflow.com/questions/1652759

  •  22-07-2019
  •  | 
  •  

Pregunta

¿cómo puedo convertir xpath como

/html/body/div[3]/ul/li[1]/a[5]

html > body > div[3] > ul > li[1] > a[5]

creo, el índice no es compatible con los selectores CSS3 ... entonces, ¿cómo lidiar con esto?

¿Fue útil?

Solución

Si encuentra que Sizzle / jQuery no puede aplicar su selector CSS3, podría ser mejor usar Complemento XPath que era parte del lanzamiento original de jQuery (y luego se eliminó ya que pocas personas lo usaron).

Las implementaciones de XPath en los navegadores tienden a ser mucho más rápido que los motores CSS. También tener JS parse & amp; convertir una expresión XPath en CSS3 y luego tener jQuery munge en algo que el navegador pueda implementar (generalmente los selectores CSS2.1 con un poco de ayuda de JS) será mucho más lento que ejecutar XPath directamente en el navegador.

No solo eso, sino que hay cosas que XPath puede hacer que CSS no puede hacer. Por ejemplo:
//h3[class="blog-title"font>/../../div[class="blog-entry"font>//input[fn:floor(value) & amp; gt; 3]
que no es demasiado complejo para que XPath se ejecute, pero imposible para CSS solo: mover hacia arriba el DOM y ejecutar una función como parte de la expresión no se puede hacer (que yo sepa), incluso en CSS3.

Otros consejos

El motor localizador CSS Selenium 1 se trasladó de CSSQuery a Sizzle, la biblioteca de selectores CSS de jQuery. Para que pueda convertir

div[3]/ul/li[1]/a[5] 

a

css=div:nth(3)>ul>li:nth(1)>a:nth(5)

y

//h3[class="blog-title"]/../../div[class="blog-entry"]//input[@value=3] 

se puede convertir a

css=h3.blog-title:parent(div.blog-entry) input[value=3]

sin embargo, // input [@ value > 3] no puede ser posible o ser complicado Para obtener más información, visite: https://github.com/jquery/sizzle/wiki/Sizzle- Inicio

la implementación de xpath en IE es muy, muy lenta. incluso aterrador lento en IE6 es por eso que la mayoría tiende a usar selectores CSS basados ??en expresiones regulares, etc. como sizzle o el más nuevo es qwery. para una selección de índice que usa en CSS, el selector :nth-child(n)

a[5] = :nth-child(5)

No puedo recordar si comienza con 0 o 1, por lo que también podría ser 4.

también si tiene diferentes tipos de hijos dentro del padre que está seleccionando, puede usar : nth-of-type () que selecciona solo el tipo dado. en su caso:

a:nth-of-type(5)

Busqué bastante y finalmente encontré estas 2 bibliotecas. Espero que ayude a alguien tan perdido como yo:

  1. James Padolsey's CSS2XPATH que fue utilizado por YQL HTML en un punto de tiempo
  2. css2xpath : un transformador genérico de CSS a XPath

Como esta es un área bastante específica, doy la bienvenida a la comunidad para que realice modificaciones en esta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top