Как извлечь текст из довольно нормального HTML?

Моим вопросом является вид подобных этот вопрос, но у меня есть больше ограничений:

  • Я знаю, что документ довольно нормален
  • они являются очень регулярными (они все произошли из того же источника
  • Я хочу приблизительно 99% видимого текста
  • приблизительно 99% того, что жизнеспособно вообще, являются текстом (они - более или менее RTF, преобразованный в HTML),
  • Я не забочусь о форматировании или даже концах абзаца.

Есть ли, кто-либо оборудует набор, чтобы сделать это, или действительно ли я более обеспечен просто вспыхивающий RegexBuddy и C#?

Я открыт для командной строки или инструментов пакетной обработки, а также библиотек C/C#/D.

12
задан Community 23 May 2017 в 10:30
поделиться

3 ответа

Вам необходимо использовать HTML Agility Pack .

Вы, вероятно, хотите найти элемент, используя потомки LINQ Ant вызов , затем получить его Innerntext .

7
ответ дан 2 December 2019 в 03:54
поделиться

Вы правы, что телефоны, не подвергающиеся тюремному взлому, ограничиваются магазином приложений Apple, и Apple «имеет право» применять любое правило, это совершенно не свободная территория. Однако во время разработки вообще не придется иметь дело с Apple. Можно использовать, например, rsync для загрузки кода на устройство и его тестирования.

-121--1793818-

Неявные объекты создаются автоматически и готовы к использованию. С этими объектами нельзя создавать другие переменные с одинаковыми именами.

-121--2275710-

Относительно просто, если загрузить HTML в файл C #, а затем с помощью библиотеки mshtml.dll или элемента управления WebBrowser в файле C #/WinForms можно обработать весь HTML-документ как дерево, пройдя дерево, захватывающее объекты IniveText.

Или можно также использовать document.all, который берет дерево, распрямляет его, а затем можно выполнить итерацию по дереву, снова захватывая IniveText.

Вот пример:

        WebBrowser webBrowser = new WebBrowser();
        webBrowser.Url = new Uri("url_of_file"); //can be remote or local
        webBrowser.DocumentCompleted += delegate
        {
            HtmlElementCollection collection = webBrowser.Document.All;
            List<string> contents = new List<string>();

            /*
             * Adds all inner-text of a tag, including inner-text of sub-tags
             * ie. <html><body><a>test</a><b>test 2</b></body></html> would do:
             * "test test 2" when collection[i] == <html>
             * "test test 2" when collection[i] == <body>
             * "test" when collection[i] == <a>
             * "test 2" when collection[i] == <b>
             */
            for (int i = 0; i < collection.Count; i++)
            {
                if (!string.IsNullOrEmpty(collection[i].InnerText))
                {
                    contents.Add(collection[i].InnerText);
                }
            }

            /*
             * <html><body><a>test</a><b>test 2</b></body></html>
             * outputs: test test 2|test test 2|test|test 2
             */
            string contentString = string.Join("|", contents.ToArray());
            MessageBox.Show(contentString);
        };

Надежда, которая помогает!

2
ответ дан 2 December 2019 в 03:54
поделиться

Здесь вы можете загрузить инструмент и его источник, который преобразует в HTML и XAML: XAML / HTML-преобразователь .

Он содержит анализатор HTML (такая вещь, очевидно, должно быть гораздо более толерантно, чем ваш стандартный анализатор XML), и вы можете пройти HTML, похожее на XML.

1
ответ дан 2 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: