using System.Collections.Generic;
public static class Program
public static void Main()
var html =@"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">
<html xmlns=""http://www.w3.org/1999/xhtml"">
<table border=""0"" cellspacing=""1"" cellpadding=""0"" id=""ADDITIONAL05|0"">
<td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">Hersteller</span></p></td><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">ID</span></p></td><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">SuperID</span></p></td></tr>
<tr><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">Fujitsu Siemens</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">1</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">554</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""></tr><tr><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">Fujitsu-Siemens-Comp</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">2</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">554</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""></tr><tr><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">Asus</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">3</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">554</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""></tr><tr><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">Toshiba</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">4</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">554</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""></tr><tr><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">Fujitsu-Siemens-Comp</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">5</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">554</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""></tr><tr><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">Fujitsu-Siemens-Comp</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">6</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">554</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""></tr><tr><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">DELL</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">8</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">554</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""></tr><tr><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">Toshiba</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">9</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">554</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""></tr><tr><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">Fujitsu Siemens</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">164</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""><td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;"" style=""""><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;"">554</span></p></td style=""padding:0.75pt 0.75pt 0.75pt 0.75pt;border-top:none;border-right:none;border-bottom:none;border-left:none;""></tr></table>
<p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;""> </span></p><p style=""text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt;""><span style=""color:#000000;background-color:transparent;font-family:Calibri;font-size:11pt;font-weight:normal;font-style:normal;""> </span></p></body>
HtmlDocument doc = new HtmlDocument();
Console.WriteLine(doc.ToPlainText());
public static string ToPlainText(this HtmlDocument doc)
StringBuilder builder = new StringBuilder();
ToPlainTextState state = ToPlainTextState.NotWhiteSpace;
Plain(builder, ref state, new[] { doc.DocumentNode });
return builder.ToString();
private static void Plain(StringBuilder builder, ref ToPlainTextState state, IEnumerable<HtmlNode> nodes)
foreach (HtmlNode node in nodes)
if (node is HtmlTextNode)
HtmlTextNode text = (HtmlTextNode)node;
Process(builder, ref state, HtmlEntity.DeEntitize(text.Text).ToCharArray());
string tag = node.Name.ToLower();
if(node.ParentNode.Name == "td" || node.ParentNode.Name == "th")
state = ToPlainTextState.WhiteSpace;
Plain(builder, ref state, node.ChildNodes);
state = ToPlainTextState.StartLine;
Plain(builder, ref state, node.ChildNodes);
state = ToPlainTextState.StartLine;
state = ToPlainTextState.NotWhiteSpace;
Plain(builder, ref state, node.ChildNodes);
state = ToPlainTextState.NotWhiteSpace;
Plain(builder, ref state, node.ChildNodes);
if (NonVisibleTags.Contains(tag)) { }
else if (InlineTags.Contains(tag))
Plain(builder, ref state, node.ChildNodes);
if (state != ToPlainTextState.StartLine)
state = ToPlainTextState.StartLine;
Plain(builder, ref state, node.ChildNodes);
if (state != ToPlainTextState.StartLine)
state = ToPlainTextState.StartLine;
private static void Process(StringBuilder builder, ref ToPlainTextState state, params char[] chars)
foreach (char ch in chars)
if (char.IsWhiteSpace(ch))
if (state == ToPlainTextState.WhiteSpace)
state = ToPlainTextState.NotWhiteSpace;
if (state == ToPlainTextState.NotWhiteSpace)
state = ToPlainTextState.WhiteSpace;
if (state == ToPlainTextState.WhiteSpace)
state = ToPlainTextState.NotWhiteSpace;
private static bool IsHardSpace(char ch) { return ch == 0xA0 || ch == 0x2007 || ch == 0x202F; }
private static readonly HashSet<string> InlineTags = new HashSet<string>
"b", "big", "i", "small", "tt", "abbr", "acronym",
"cite", "code", "dfn", "em", "kbd", "strong", "samp",
"var", "a", "bdo", "br", "img", "map", "object", "q",
"script", "span", "sub", "sup", "button", "input", "label",
private static readonly HashSet<string> NonVisibleTags = new HashSet<string> { "script", "style" };
private enum ToPlainTextState