2011-07-08 2 views
2

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

+0

Я поставлю обязательное предупреждение о том, что не разумно использовать [регулярное выражение для анализа XML/HTML] (http://stackoverflow.com/questions/2400623/if-youre-not-supposed-to-use-regular -expressions-на-синтаксического анализа в HTML-то-как-это-HTM). Ваша проблема показывает это хорошо, древовидная структура тегов таблицы HTML затрудняет работу с регулярным выражением. –

+0

Возможный дубликат: http://stackoverflow.com/questions/731649/how-can-i-convert-html-to-text-in-c –

ответ

1

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

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

+0

Это уже я сделал .. но мой вопрос - как разобрать таблицу .. .? если таблица содержит другую таблицу, и вы не знаете, сколько ее содержит много таблиц, то как вы получите внутренние тексты. –

+0

Я кое-что не понимаю. Как вы загружаете переменную 'htmldoc'? – Stephan

+0

Webclient wb = new WebClient(); htmldoc = wb.downloadstring (querry); –

Смежные вопросы