2011-07-12 19 views
39

Actualmente estoy usando HtmlAgilityPack con una aplicación de consola para raspar un sitio web. Como el html está codificado (devuelve caracteres codificados como '), debo decodificar antes de guardar el contenido en mi base de datos.HtmlAgilityPack y HtmlDecode

¿Hay alguna manera de decodificar el html devuelto utilizando HtmlAgilityPack sin tener que usar HttpUtility.HtmlDecode? Quiero evitar agregar System.Web a mi aplicación de consola si es posible.

+0

¿Por qué no agrega System.Web? Como es una biblioteca .net predeterminada, debería estar disponible en cualquier máquina cliente de todos modos ... – ChrFin

+3

@chrfin: Incorrecto; no está en el perfil del cliente. – SLaks

Respuesta

80

El Html Agility Pack está equipado con una clase de utilidad llamada HtmlEntity. Tiene un método estático con la firma siguiente:

/// <summary> 
    /// Replace known entities by characters. 
    /// </summary> 
    /// <param name="text">The source text.</param> 
    /// <returns>The result text.</returns> 
    public static string DeEntitize(string text) 

Es compatible con entidades conocidas (como &nbsp;) y caracteres codificados tales como &#039; también.

5

Simplemente añadiendo mis 2 centavos: He encontré con algunas pruebas de rendimiento utilizando StopWatch clase y encontré que HttpUtility.HtmlDecode es de aproximadamente 15-20% más rápido que el método DeEntitize. También DeEntitize tiene algunos errores (ver comentarios arriba).

Así que tal vez hacer referencia a System.Web no es tan malo después de todo.

Si está escribiendo una aplicación que ya tiene como objetivo ".NET completo" (opuesto a ".NET Client Profile", que es una versión ligera), me gustaría hacer referencia a System.Web.

Cuestiones relacionadas