Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extracting Inner text from HTML BODY node with Html Agility Pack

Need a bit of help with HTML Agility Pack!

Basically I want to grab plain-text withing the body node of the HTML. So far I have tried this in vb.net and it fails to return the innertext meaning no change is seen, well atleast from what I can see.

Dim htmldoc As HtmlDocument = New HtmlDocument
htmldoc.LoadHtml(html)

Dim paragraph As HtmlNodeCollection = htmldoc.DocumentNode.SelectNodes("//body")

If Not htmldoc Is Nothing Then
   For Each node In paragraph
       node.ParentNode.RemoveChild(node, True)
   Next
End If

Return htmldoc.DocumentNode.WriteContentTo

I have tried this:

Return htmldoc.DocumentNode.InnerText

But still no luck!

Any advice???

like image 870
KJSR Avatar asked Jul 27 '11 22:07

KJSR


2 Answers

How about:

Return htmldoc.DocumentNode.SelectSingleNode("//body").InnerText
like image 167
Jeff Mercado Avatar answered Nov 13 '22 13:11

Jeff Mercado


Jeff's solution is ok if you haven't tables, because text located in the table is sticking like cell1cell2cell3. To prevent this issue use this code (C# example):

var words = doc.DocumentNode?.SelectNodes("//body//text()")?.Select(x => x.InnerText);
return words != null ? string.Join(" ", words) : String.Empty;
like image 1
EminST Avatar answered Nov 13 '22 11:11

EminST