c# .net windows-phone-8 html-agility-pack portable-class-library

c# - HTML Linq con HtmlAgilityPack, o alternativa, en PCL



.net windows-phone-8 (3)

Has hecho y respondido tu propia pregunta, ¿no es así?

HtmlAgilityPack no admite el uso con bibliotecas de clases portátiles.

En el mejor de los casos, deberá considerar portar / migrar la funcionalidad específica que necesita de una manera que funcione en las plataformas que está utilizando.

He escrito un proyecto en .NET 4 y actualmente estoy en el proceso de permitir que se ejecute en Windows Phone también. Estoy usando HtmlAgilityPack, una biblioteca bien conocida que permite consultas de Linq sobre HTML, y solo estoy usando las interfaces LoadHtml y Linq que proporciona.

Habiendo convertido las librerías de clase de .NET 4 a PCL (Portable Class Library) con soporte para .NET 4 y WP8, parece que ya no puedo usar la biblioteca HtmlAgilityPack. ¿Hay alguna manera de permitir que HtmlAgilityPack funcione correctamente en un proyecto PCL o hay una alternativa variable con una interfaz Linq similar que funciona como se esperaba?

EDITAR : HtmlAgilityPack proporciona 9 versiones diferentes, ninguna de las cuales es compatible con PCL. Ninguno de ellos resuelve las dependencias de las referencias. Para algunas versiones, puede parecer que sí lo hace, pero con el uso se generará un error con las ''dependencias no resueltas, no resueltas'' habituales.

EDIT # 2 Dado que es fácil perder un pequeño comentario, actualizaré esta respuesta con la solución que se me ocurrió. Extraje lo que se necesitaba para la funcionalidad básica e implementé los componentes faltantes para que todo funcione. El resultado está aquí https://github.com/Deathspike/HtmlAgilityPack-PCL


Mire HtmlParserSharp , este es un puerto C # del analizador HTML5 de validator.nu . El proyecto debería ser muy fácil de construir como una biblioteca PCL, ya que es más o menos un puerto directo de C ++ y utiliza solo las clases más básicas de .NET Framework, con algunas actualizaciones para mejorar el rendimiento en C #.

Si bien la mayoría del trabajo que he hecho con HtmlParserSharp ha sido para CsQuery , que en sí mismo está muy lejos de ser compatible con PCL, no hay ninguna razón para que HtmlParserSharp no funcione perfectamente por sí solo como un analizador de HTML delgado para su propósitos. El proyecto incluye un ejemplo de creación de un DOM basado en XmlElement , pero el generador de árbol es una abstracción, por lo que podría cambiarlo fácilmente para usar sus propios objetos de nodo de árbol.


Una opción es transferir el código fuente de HTML Agility Pack a una PCL. Puede ejecutar PCL Compliance Analyzer para tener una idea de lo difícil que será esto.

Alternativamente, use el patrón de abstracción. Cree una interfaz portátil para la funcionalidad que necesita (es decir, LoadHtml y Linq ) y luego implemente esa interfaz para cada plataforma llamando al HTML Agility Pack. Entonces, su código portátil puede depender de la implementación específica de la plataforma.

Para obtener más información, consulte esta publicación en el blog: Cómo hacer que las bibliotecas de clases portátiles funcionen para usted