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.
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.
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);
}