XPath "Not". Ignora i rami con un tag specifico

html-agility-pack xpath

Domanda

Ho caricato una pagina Web in HTML Agility Pack e ho un DOM. Voglio usare XPATH per estrarre tutto il testo sulla pagina (ma non la javascript trovata all'interno dei tag <script> ).

Immagino di aver bisogno di un // text () e poi di un 'not' per ignorare qualsiasi tag all'interno del ramo che contiene uno <script> .

Ho provato

doc.DocumentNode.SelectNodes("//text()[not(self::script)]"))

e

doc.DocumentNode.SelectNodes("//text()[not(self::script)]"))

ma nessuno dei due funziona. Un esempio della proprietà XPath di un nodo che restituiscono è (notare lo Script)

doc.DocumentNode.SelectNodes("//text()[not(self::script)]"))

Mi sono consultato con entrambi questi post.

È possibile fare la corrispondenza "non" in XPath?

Prendi tutto il testo da html con Html Agility Pack (questo è un buon post ma fa emergere il JS)

Eventuali suggerimenti?

Risposta accettata

Il primo tentativo respinge tutti i nodi di testo che sono elementi di script e il secondo rifiuta tutti i nodi di testo con nodi di script figli. Naturalmente, in entrambi i casi, la condizione non è mai vera.

Non hai spiegato chiaramente le tue esigenze, ma suppongo che tu voglia rifiutare tutti i nodi di testo che hanno elementi di script come genitore, che sarebbe

//text()[not(parent::script)]

o

//text()[not(parent::script)]



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché