извлечение только текста страницы с помощью HTMLAgilityPack

.net c# html-agility-pack xml-parsing xpath

Вопрос

Хорошо, поэтому я действительно новичок в запросах XPath, используемых в HTMLAgilityPack.

Поэтому рассмотрим эту страницу http://health.yahoo.net/articles/healthcare/what-your-favorite-flavor-says-about-you . Я хочу извлечь только содержимое страницы и ничего больше.

Поэтому для этого я сначала удаляю скрипты и теги стиля.

Document = new HtmlDocument();
        Document.LoadHtml(page);
        TempString = new StringBuilder();
        foreach (HtmlNode style in Document.DocumentNode.Descendants("style").ToArray())
        {
            style.Remove();
        }
        foreach (HtmlNode script in Document.DocumentNode.Descendants("script").ToArray())
        {
            script.Remove();
        }

После этого я пытаюсь использовать // text () для получения всех текстовых узлов.

foreach (HtmlTextNode node in Document.DocumentNode.SelectNodes("//text()"))
        {
            TempString.AppendLine(node.InnerText);
        }

Однако не только я не получаю только текст, я также получаю множество / r / n символов.

Пожалуйста, я требую небольшого руководства в этом отношении.

Популярные ответы

Если вы считаете, что узлы script и style имеют только текстовые узлы для детей, вы можете использовать это выражение XPath для получения текстовых узлов, которые не находятся в тегах script или style , так что вам не нужно заранее удалять узлы:

//*[not(self::script or self::style)]/text()

Вы также можете исключить текстовые узлы, которые являются только пробелами, с помощью normalize-space() XPath:

//*[not(self::script or self::style)]/text()[not(normalize-space(.)="")]

или короче

//*[not(self::script or self::style)]/text()[normalize-space()]

Но вы все равно получите текстовые узлы, которые могут иметь пробелы в начале или конце. Это можно использовать в вашем приложении, как предлагает @ aL3891.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему