2011-07-12 4 views
39

J'utilise actuellement HtmlAgilityPack avec une application console pour gratter un site Web. Comme le code HTML est encodé (il renvoie des caractères codés comme '), je dois décoder avant de sauvegarder le contenu dans ma base de données.HtmlAgilityPack et HtmlDecode

est-il un moyen de décoder le code HTML retourné à l'aide HtmlAgilityPack sans avoir à utiliser HttpUtility.HtmlDecode? Je veux éviter d'ajouter System.Web à mon application de console si possible.

+0

Pourquoi vous pas ajouter System.Web? Comme il s'agit d'une bibliothèque .net par défaut, elle devrait être disponible sur n'importe quelle machine client de toute façon ... – ChrFin

+3

@chrfin: Wrong; ce n'est pas dans le profil client. – SLaks

Répondre

80

Le Html Agility Pack est équipé d'une classe utilitaire appelé HtmlEntity. Il dispose d'une méthode statique avec la signature suivante:

/// <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) 

Il supporte des entités bien connues (comme &nbsp;) et des caractères codés comme &#039; aussi.

5

juste ajouter mes 2 cents: J'ai couru quelques tests de performance en utilisant StopWatch classe et a constaté que HttpUtility.HtmlDecode est d'environ 15-20% plus rapide que la méthode DeEntitize. Aussi DeEntitize a quelques bugs (voir les commentaires ci-dessus).

référencement Alors peut-être System.Web est pas si mal après tout.

Si vous écrivez une application qui cible déjà ".NET full" (par opposition à ".NET Client Profile" - qui est une version allégée) - j'irais faire référence à System.Web.