estrarre solo il testo della pagina utilizzando HTMLAgilityPack

.net c# html-agility-pack xml-parsing xpath

Domanda

Ok, quindi sono davvero nuovo per le query XPath utilizzate in HTMLAgilityPack.

Quindi consideriamo questa pagina http://health.yahoo.net/articles/healthcare/what-your-favorite-flavor-says-about-you . Quello che voglio è estrarre solo il contenuto della pagina e nient'altro.

Quindi per quello prima rimuovo i tag script e style.

Document = new HtmlDocument();
        Document.LoadHtml(page);
        TempString = new StringBuilder();
        foreach (HtmlNode style in Document.DocumentNode.Descendants("style").ToArray())
        {
            style.Remove();
        }
        foreach (HtmlNode script in Document.DocumentNode.Descendants("script").ToArray())
        {
            script.Remove();
        }

Dopo di che sto cercando di usare // text () per ottenere tutti i nodi di testo.

Document = new HtmlDocument();
        Document.LoadHtml(page);
        TempString = new StringBuilder();
        foreach (HtmlNode style in Document.DocumentNode.Descendants("style").ToArray())
        {
            style.Remove();
        }
        foreach (HtmlNode script in Document.DocumentNode.Descendants("script").ToArray())
        {
            script.Remove();
        }

Comunque non solo non sto ottenendo solo testo, sto anche ottenendo numerosi / r / n caratteri.

Per favore ho bisogno di una piccola guida in questo senso.

Risposta popolare

Se si considera che i nodi di script e di style dispongono solo di nodi di testo per i bambini, è possibile utilizzare questa espressione XPath per ottenere nodi di testo che non si trovano in tag di script o di style , quindi non è necessario rimuovere preventivamente i nodi:

//*[not(self::script or self::style)]/text()

È inoltre possibile escludere nodi di testo che sono solo spazi bianchi utilizzando lo spazio di normalize-space() XPath:

//*[not(self::script or self::style)]/text()

o il più breve

//*[not(self::script or self::style)]/text()

Ma otterrete comunque nodi di testo che potrebbero avere spazi bianchi iniziali o finali. Questo può essere gestito nella tua applicazione come suggerito da @ aL3891.




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é