Ottenere il testo da un nodo usando HtmlAgilityPack

c# html-agility-pack xpath

Domanda

Ho il seguente codice HTML:

<div class="top">
    <p>Blah.</p>
    I want <em>this</em> text.
</div>

Qual è la notazione XPath per estrarre la stringa " I want <em>this</em> text. "? EDIT: non voglio necessariamente una singola espressione XPath per estrarre la stringa. Anche selezionare più nodi e scorrere su di essi per produrre la frase sarebbe ottimo.

<div class="top">
    <p>Blah.</p>
    I want <em>this</em> text.
</div>

Risposta accettata

Cosa vuoi estrarre, nodi o una stringa?

Se vuoi i nodi, "I want <em>this</em> text." è un frammento XML che consiste nel livello superiore di due nodi di testo e un elemento <em> , che ha un nodo di testo figlio. Poiché ha più nodi al livello più alto, è necessario utilizzare SelectNodes("xpath expression a la @Alejandro") piuttosto che SelectSingleNode() per estrarli.

Se vuoi una stringa, di nuovo devi usare SelectNodes (); e quindi scorrere i nodi selezionati e concatenare l'HHML esterno di ciascuno. Vedi qui per un buon esempio di qualcosa di simile.

Inoltre, è poco chiaro dal tuo esempio quale espressione XPath ti darebbe in generale ciò che desideri. Es. Vuoi tutto dopo il <p>...</p> iniziale <p>...</p> sotto <div class="top"> ? O vuoi tutto il testo sotto gli elementi <div> tranne tutti <p> ? O forse qualcos'altro? Naturalmente se le espressioni XPath di @ Alejandro funzionano per te, allora è già abbastanza ben specificato.


Risposta popolare

/div[@class='top']/p[.='Blah.']/following-sibling::node()

o

/div[@class='top']/p[.='Blah.']/following-sibling::node()



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é