besoin d'une bibliothèque javascript ou jquery pour convertir xpath au format CSS3 sélectionnable en jquery

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

  •  22-07-2019
  •  | 
  •  

Question

comment puis-je convertir xpath comme

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

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

Je crois que l'index n'est pas pris en charge avec les sélecteurs CSS3 .... alors comment gérer cela?

Était-ce utile?

La solution

Si vous constatez que Sizzle / jQuery ne peut pas appliquer votre sélecteur CSS3, il peut être préférable d’utiliser le XPath plugin qui faisait partie de la version originale de jQuery (puis supprimé car peu de gens l’utilisaient réellement).

Les implémentations XPath dans les navigateurs ont tendance à être beaucoup plus que les moteurs CSS. Avoir aussi JS parse & amp; convertir une expression XPath en CSS3, puis avoir jQuery munge en quelque chose que le navigateur peut implémenter (généralement des sélecteurs CSS2.1 avec un peu d’aide JS) va être beaucoup plus lent que l’exécution directe de XPath dans le navigateur.

Non seulement cela, mais il y a des choses que XPath peut faire que CSS ne peut pas. Par exemple:
// h3 [class = "titre-blog"] /../../ div [classe = "entrée-blog"] // entrée [fn: étage (valeur) & amp; gt; 3]
ce qui n’est pas excessivement complexe à exécuter pour XPath, mais impossible pour CSS seul: il est impossible (à ma connaissance, de remonter dans le DOM et d’exécuter une fonction dans le cadre de l’expression), même en CSS3.

Autres conseils

Le moteur de localisation CSS de Selenium 1 est passé de CSSQuery à Sizzle, la bibliothèque de sélecteurs CSS de jQuery. Donc, vous pouvez convertir

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

à

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

et

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

peut être converti en

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

Cependant, // entrée [@ valeur > 3] ne peut pas être possible ou est délicat Pour plus d'informations, visitez: https://github.com/jquery/sizzle/wiki/Sizzle- Accueil

la mise en œuvre de xpath dans IE est très lente. Même dans Terrifiant IE6, c’est pourquoi la plupart des gens ont tendance à utiliser des sélecteurs CSS basés sur regex, comme Sizzle ou le plus récent, Qwery. pour un index sélectionnez vous utilisez dans CSS le sélecteur : nth-child (n)

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

Je ne me souviens pas s'il commence par 0 ou 1, il pourrait donc s'agir de 4.

Si vous avez différents types d'enfants dans le parent que vous sélectionnez, vous pouvez utiliser : nth-of-type () qui sélectionne uniquement le type donné. dans votre cas:

a:nth-of-type(5)

Vous avez cherché un peu et trouvé ces 2 bibliothèques. J'espère que cela aidera quelqu'un d'aussi perdu que moi:

  1. CSS2XPATH de James Padolsey utilisé par YQL HTML à un moment donné temps
  2. css2xpath - Transformateur CSS générique en XPath

Comme il s’agit d’une niche, je souhaite la bienvenue à la communauté pour y apporter des modifications.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top