Использование HTML Tidy в проекте Visual C ++ 2010 Windows Forms - PullRequest
4 голосов
/ 01 сентября 2011

Я использую VC ++ 2010 Express и пытаюсь включить HTML Tidy для очистки строк кода HTML.Я хочу обработать HTML как строку (НЕ из файла) и сохранить обработанный очищенный HTML в строку (НЕ в файл).Проект представляет собой проект C ++ для форм Windows, компилятор - /CLR.

Я пытался, чаще, чем хочу признаться, присоединить Tidy к моему проекту различными способами.Я терпел неудачу в каждой попытке, и я просто не уверен, куда идти отсюда.Самым многообещающим был .NET-упаковщик под названием TidyManaged, но я не смог найти никакой документации, объясняющей, как использовать его с C ++ (похоже, он предназначен для C #).Различные оболочки C ++ не работают для меня вообще.Кажется, в документации крайне не хватает того, как заставить их работать.

Также я готов принять решение, которое вообще не использует tidy, а какой-то другой эквивалентный инструмент для очистки HTML.Меня беспокоит возраст Tidy (август 2000 г.) и его эффективность для современных более новых стандартов XHTML.

Кроме того, если это возможно, я хочу включить библиотеку C в свой код напрямую, не полагаясь нана DLL, но я не знаю, как заставить это работать или даже если он может работать.

Любые предложения о том, как это сделать, будет принята с благодарностью, учитывая, что это HTML, мыречь идет здесь (часто искаженный HTML и XHTML), а не XML.

Заранее спасибо!

PS - я новичок в C ++: /

1 Ответ

3 голосов
/ 02 сентября 2011

Почти 48 часов боролись с этой проблемой. Решение найдено! Вот оно ...

Используя очень простую обертку .NET отсюда http://www.codeproject.com/KB/cs/ZetaHtmlTidy.aspx преобразовал проект VC в VC ++ 2010 и скомпилировал как DLL. Ниже приведен код, который я использовал для его вызова:

System::String^ TidyMyHTML(String^ MyHTMLString)
{
    using namespace ZetaHtmlTidy;
    HtmlTidy tidy;
    String^ s = tidy.CleanHtml( MyHTMLString, HtmlTidyOptions::ConvertToXhtml );
    return s;
}

Надеюсь, этот пост избавит кого-то еще от того же.

EDIT:

Сделав этот шаг дальше, я смог преобразовать файлы проекта VC ++ 2008 из аккуратного источника, прикрепленного к оболочке, и обновить их до файлов проекта VC ++ 2010. Затем я смог скомпилировать проект tidy (отдельно от его проекта класса-оболочки) в статические библиотеки libtidy.lib (как release, так и debug). Затем я смог включить его класс-обертку в мое приложение и указать на файлы include и lib. Конечным результатом было именно то, что я хотел, решение, включающее аккуратность в мое приложение без необходимости иметь dll-зависимость. Весь этот опыт ускорил мою кривую обучения подключению библиотек C к моим приложениям C ++.

Спасибо за предложения, и я надеюсь, что кто-то найдет этот пост полезным.

...