Prendi tutto il testo da html con Html Agility Pack

c# html-agility-pack

Domanda

Ingresso

<html><body><p>foo <a href='http://www.example.com'>bar</a> baz</p></body></html>

Produzione

foo
bar
baz

Conosco htmldoc.DocumentNode.InnerText , ma darà a foobarbaz - Voglio ottenere ogni testo, non tutto alla volta.

Risposta accettata

var root = doc.DocumentNode;
var sb = new StringBuilder();
foreach (var node in root.DescendantNodesAndSelf())
{
    if (!node.HasChildNodes)
    {
        string text = node.InnerText;
        if (!string.IsNullOrEmpty(text))
            sb.AppendLine(text.Trim());
    }
}

Questo fa quello che ti serve, ma non sono sicuro che sia il modo migliore. Forse dovresti eseguire iterazioni su qualcosa di diverso da DescendantNodesAndSelf per ottenere prestazioni ottimali.


Risposta popolare

XPATH è tuo amico :)

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"<html><body><p>foo <a href='http://www.example.com'>bar</a> baz</p></body></html>");

foreach(HtmlNode node in doc.DocumentNode.SelectNodes("//text()"))
{
    Console.WriteLine("text=" + node.InnerText);
}


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é