Подтвердить что ты не робот

HTML Linq с HtmlAgilityPack, или альтернативным, в PCL

Я написал проект на .NET 4, и в настоящее время я нахожусь в состоянии разрешить его запуск на Windows Phone. Я использую HtmlAgilityPack, хорошо известную библиотеку, которая позволяет запросы Linq по HTML, и я использую только интерфейсы LoadHtml и Linq, которые он предоставляет.

Преобразуя библиотеки классов из .NET 4 в PCL (Portable Class Library) с поддержкой .NET 4 и WP8, я больше не могу использовать библиотеку HtmlAgilityPack. Есть ли способ позволить HtmlAgilityPack правильно функционировать в рамках проекта PCL или есть альтернатива с аналогичным интерфейсом Linq, который работает по назначению?

EDIT: HtmlAgilityPack предоставляет 9 различных версий, ни один из которых не совместим с PCL. Ни один из них не разрешает зависимости от ссылок. Для некоторых версий может показаться, что это происходит, но при использовании ошибка будет вызвана с помощью обычной "не может загружать нерешенные зависимости".

РЕДАКТИРОВАТЬ № 2. Так как легко пропустить небольшой комментарий, я обновлю этот ответ с решением, которое я придумал. Я извлек то, что было необходимо для базовых функций, и реализовал недостающие компоненты, чтобы все работало. Результат здесь https://github.com/Deathspike/HtmlAgilityPack-PCL

4b9b3361

Ответ 1

Вы спросили и ответили на свой вопрос - не так ли?

HtmlAgilityPack не поддерживает использование портативных библиотек классов.

В лучшем случае вам нужно взглянуть на перенос/перенос требуемой вами конкретной функции, которая будет работать на платформах, которые вы используете.

Ответ 2

Один из вариантов заключается в переносе исходного кода HTML Agility Pack на PCL. Вы можете запустить PCL Compliance Analyzer, чтобы понять, насколько это будет сложно.

В качестве альтернативы используйте рисунок абстракции. Создайте портативный интерфейс для необходимой вам функциональности (т.е. LoadHtml и Linq), а затем реализуйте этот интерфейс для каждой платформы, вызывая в HTML Agility Pack. Тогда ваш переносимый код может зависеть от реализации конкретной платформы.

Для получения дополнительной информации см. это сообщение в блоге: Как сделать переносные библиотеки классов для вас

Ответ 3

Посмотрите HtmlParserSharp, это порт С# Validator.nu HTML5 парсер. Проект должен быть очень легким для создания в качестве библиотеки PCL, поскольку он более или менее прямой С++-порт и использует только самые базовые классы .NET Framework, с несколькими обновлениями для повышения производительности на С#.

В то время как большая часть работы, которую я сделал с HtmlParserSharp, была для CsQuery, что само по себе является долгим от совместимости с PCL, нет никаких оснований полагать, что HtmlParserSharp не будет работать отлично, если он будет использоваться как нежный HTML-парсер для ваших целей. Проект включает пример построения DOM на основе XmlElement, но построитель дерева является абстракцией, поэтому вы можете легко изменить это, чтобы вместо этого использовать свои собственные объекты node.