Преобразовать веб-страницу в обычный текст ..? - PullRequest
2 голосов
/ 08 июля 2011

Я пытаюсь преобразовать веб-страницу в обычный текст.Но если я столкнулся с таблицей, я тоже получаю теги 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 ]

1 голос
/ 08 июля 2011

Вы можете использовать тело 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>world или hello<i>world</i>, будет преобразована в InnerText в helloworld - при удалении тегов.Эту проблему трудно решить, так как отображение часто определяется CSS, а не только разметкой.

1 голос
/ 08 июля 2011

Если вы используете пакет Agility для анализа таблицы, вам не нужно удалять теги HTML с помощью регулярных выражений.Здесь есть несколько хороших примеров разбора таблиц с использованием пакета Agility для HTML.Например: HTML-пакет Agility - таблицы разбора

...