Я пытаюсь преобразовать веб-страницу в простой текст. Но если я столкнулся с таблицей, то получаю 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 теги.
Если вы используете HTML Agility pack для анализа таблицы, вам не нужно удалять HTML-теги с вашим регулярным выражением. Есть несколько хороших примеров синтаксического анализа таблиц, использующих HTML Agility pack здесь, на SO. ex: пакет гибкости HTML - таблицы разбора
Вы можете использовать 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, а не только разметкой.