将网页转换为纯文本..?

时间:2011-07-08 15:05:38

标签: c# regex html-agility-pack

我正在尝试将网页转换为纯文本。但是,如果我遇到了表格,我也会获得td和tr标签。如果我替换那些表标签,那么我就无法获得一些内容。

这是我的代码

string s = Regex.Replace(htmldoc, "<script.*?</script>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<!--.*?-->", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<style.*?style>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<a.*?a>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<img.*?img>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<table.*?table>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
s = doc.DocumentNode.SelectSingleNode("//body").InnerText.Trim();

请检查并告诉我如何在不获取td和tr标签的情况下从表中获取内容。

2 个答案:

答案 0 :(得分:1)

如果您使用HTML Agility包来解析表格,则无需使用正则表达式删除HTML标记。在SO上有一些使用HTML Agility Pack解析表的好例子。例如:HTML Agility pack - parsing tables

答案 1 :(得分:1)

您可以使用正文的InnerText

string html = @"
<html>
    <title>title</title>
    <body>
           <h1> The wheel.</h1>
           Stop reinventing the wheel ! Use powerful APIs 
           for manipulating html docs !
           <h3> I am fine </h3>
           <img src=""da_wheel_in_my_mind.png""/>
    </body>
</html>";

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
string text = doc.DocumentNode.SelectSingleNode("//body").InnerText;

接下来,您可能想要折叠空格和新行:

text = Regex.Replace(text, @"\s+", " ").Trim();

但请注意,虽然在这种情况下有效,但hello<br>worldhello<i>world</i>等标记将由InnerText转换为helloworld - 删除标记。很难解决这个问题,因为显示通常由CSS决定,而不仅仅是由标记决定。