Как я могу конвертировать HTML в текст в C #? - PullRequest
67 голосов
/ 09 апреля 2009

Я ищу код C # для преобразования HTML-документа в обычный текст.

Я не ищу простое удаление тегов, но что-то, что будет выводить простой текст с разумным сохранением исходного макета.

Вывод должен выглядеть так:

Html2Txt при W3C

Я посмотрел пакет HTML Agility Pack, но не думаю, что это то, что мне нужно. У кого-нибудь есть другие предложения?

РЕДАКТИРОВАТЬ: Я просто скачал пакет Agility HTML из CodePlex и запустил проект Html2Txt. Какое разочарование (по крайней мере, модуль, который делает преобразование HTML в текст)! Все, что он делал, это вырезал теги, выравнивал таблицы и т. Д. Вывод не выглядел так, как Html2Txt @ W3C. Жаль, что этот источник не доступен. Я искал, есть ли более «консервированное» решение.

РЕДАКТИРОВАТЬ 2: Спасибо всем за ваши предложения. FlySwat наклонил меня в ту сторону, куда я хотел идти. Я могу использовать класс System.Diagnostics.Process для запуска lynx.exe с ключом "-dump", чтобы отправить текст в стандартный вывод и перехватить стандартный вывод с помощью ProcessStartInfo.UseShellExecute = false и ProcessStartInfo.RedirectStandardOutput = true. Я оберну все это в класс C #. Этот код будет вызываться только изредка, поэтому я не слишком озабочен порождением нового процесса по сравнению с выполнением его в коде. Плюс, Рысь БЫСТРАЯ !!

Ответы [ 19 ]

0 голосов
/ 22 сентября 2010

Вы можете использовать WebBrowser для отображения в памяти вашего HTML-контента. После события LoadCompleted ...

IHTMLDocument2 htmlDoc = (IHTMLDocument2)webBrowser.Document;
string innerHTML = htmlDoc.body.innerHTML;
string innerText = htmlDoc.body.innerText;
0 голосов
/ 09 апреля 2009

Я использовал Detagger в прошлом. Он отлично справляется с форматированием HTML как текста и представляет собой нечто большее, чем просто средство удаления тегов.

0 голосов
/ 09 апреля 2009

Еще один пост предлагает HTML-пакет agility :

Это гибкий HTML-парсер, который создает DOM для чтения / записи и поддерживает обычный XPATH или XSLT (вы на самом деле не нужно понимать XPATH, ни XSLT использовать его, не волнуйтесь ...). это библиотека кода .NET, которая позволяет вам разбирать "вне Интернета" HTML-файлы. парсер очень терпимый с "реальным Мир "искаженный HTML. Объект Модель очень похожа на то, что предлагает System.Xml, но для документов HTML (или потоки).

0 голосов
/ 09 апреля 2009

Я не знаю C #, но здесь есть довольно маленький и легкий для чтения скрипт на python html2txt: http://www.aaronsw.com/2002/html2text/

0 голосов
/ 26 октября 2014

Если вы используете .NET Framework 4.5, вы можете использовать System.Net.WebUtility.HtmlDecode (), который принимает строку в кодировке HTML и возвращает декодированную строку.

Документировано в MSDN по адресу: http://msdn.microsoft.com/en-us/library/system.net.webutility.htmldecode(v=vs.110).aspx

Вы также можете использовать это в приложении Магазина Windows.

0 голосов
/ 16 июня 2015

Попробуйте простой и удобный способ: просто позвоните StripHTML(WebBrowserControl_name);

 public string StripHTML(WebBrowser webp)
        {
            try
            {
                doc.execCommand("SelectAll", true, null);
                IHTMLSelectionObject currentSelection = doc.selection;

                if (currentSelection != null)
                {
                    IHTMLTxtRange range = currentSelection.createRange() as IHTMLTxtRange;
                    if (range != null)
                    {
                        currentSelection.empty();
                        return range.text;
                    }
                }
            }
            catch (Exception ep)
            {
                //MessageBox.Show(ep.Message);
            }
            return "";

        }
0 голосов
/ 29 сентября 2009

Это еще одно решение для преобразования HTML в текст или RTF в C #:

    SautinSoft.HtmlToRtf h = new SautinSoft.HtmlToRtf();
    h.OutputFormat = HtmlToRtf.eOutputFormat.TextUnicode;
    string text = h.ConvertString(htmlString);

Эта библиотека не бесплатная, это коммерческий продукт, и это мой собственный продукт.

0 голосов
/ 11 января 2019

Эта функция конвертирует «То, что вы видите в браузере» в простой текст с переносами строк. (Если вы хотите увидеть результат в браузере, используйте закомментированное возвращаемое значение)

public string HtmlFileToText(string filePath)
{
    using (var browser = new WebBrowser())
    {
        string text = File.ReadAllText(filePath);
        browser.ScriptErrorsSuppressed = true;
        browser.Navigate("about:blank");
        browser?.Document?.OpenNew(false);
        browser?.Document?.Write(text);
        return browser.Document?.Body?.InnerText;
        //return browser.Document?.Body?.InnerText.Replace(Environment.NewLine, "<br />");
    }   
}
0 голосов
/ 06 ноября 2009

Я недавно написал в блоге о решении , которое помогло мне с использованием файла Markdown XSLT для преобразования исходного кода HTML. Разумеется, исходный код HTML должен быть в первую очередь действительным XML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...