è necessaria una libreria javascript o jquery per convertire xpath in formato CSS3 selezionabile in jquery

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

  •  22-07-2019
  •  | 
  •  

Domanda

come posso convertire xpath come

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

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

credo che l'indice non sia supportato con i selettori CSS3 .... quindi come gestirlo?

È stato utile?

Soluzione

Se ritieni che Sizzle / jQuery non riesca ad applicare il selettore CSS3, potrebbe essere meglio utilizzare Plugin XPath che faceva parte della versione originale di jQuery (e quindi rimosso poiché poche persone lo hanno effettivamente utilizzato).

Le implementazioni di XPath nei browser tendono ad essere molto più più veloci rispetto ai motori CSS. Avere anche JS parse & amp; convertire un'espressione XPath in CSS3 e avere jQuery munge che in qualcosa che il browser può implementare (in genere selettori CSS2.1 con un po 'di assistenza JS) sarà molto più lento rispetto all'esecuzione di XPath direttamente nel browser.

Non solo, ma ci sono cose che XPath può fare che CSS non può fare. Ad esempio:
//h3[class="blog-title"[/../../div[class="blog-entry" lasting//input[fn:floor(value) & amp; gt; 3]
che non è eccessivamente complesso da eseguire per XPath, ma impossibile solo per i CSS: risalire al DOM ed eseguire una funzione come parte dell'espressione non può (per quanto ne sappia) non essere ancora fatto, nemmeno in CSS3.

Altri suggerimenti

Il motore di localizzazione CSS di Selenium 1 è stato spostato da CSSQuery a Sizzle, la libreria di selettori CSS di jQuery. Quindi puoi convertire

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

a

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

e

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

può essere convertito in

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

tuttavia // input [@ value > 3] non può essere possibile o essere complicato Per maggiori informazioni visita: https://github.com/jquery/sizzle/wiki/Sizzle- Inizio

l'implementazione di xpath in IE è molto, molto lenta. anche terribilmente lento in IE6 è per questo che la maggior parte tende ad usare selettori CSS basati su regex ecc. come sfrigolare o il più recente è qwery. per un indice seleziona che usi nei CSS il selettore :nth-child(n)

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

Non ricordo se inizia con 0 o 1, quindi potrebbe anche essere 4.

anche se hai genitori diversi all'interno del genitore in cui stai selezionando, puoi usare : nth-of-type () che seleziona solo il tipo dato. nel tuo caso:

a:nth-of-type(5)

Ho cercato un bel po 'e finalmente ho trovato queste 2 librerie. Spero che aiuti qualcuno perso come me:

  1. CSS2XPATH utilizzato da HTML YQL in un punto di tempo
  2. css2xpath - Un trasformatore generico da CSS a XPath

Poiché si tratta di un'area di nicchia, accolgo con favore la community di apportare modifiche a questo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top