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

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

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é