web-dev-qa-db-fra.com

HtmlAgilityPack et HtmlDecode

J'utilise actuellement HtmlAgilityPack avec une application console pour gratter un site Web. Puisque le html est encodé (il retourne des caractères encodés comme ') Je dois décoder avant d'enregistrer le contenu dans ma base de données.

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

56
Thomas

Le pack d'agilité Html est équipé d'une classe utilitaire appelée HtmlEntity. Il a 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 prend en charge des entités bien connues (comme &nbsp;) et des caractères codés tels que &#039; ainsi que.

95
Simon Mourier

Ajout de mes 2 cents: j'ai effectué des tests de performances à l'aide de la classe StopWatch et j'ai constaté que HttpUtility.HtmlDecode est d'environ 15-20% plus rapide que la méthode DeEntitize. DeEntitize a également quelques bugs (voir les commentaires ci-dessus).

Alors peut-être que référencer System.Web n'est pas si mal que ça.

Si vous écrivez une application qui cible déjà ".NET full" (par opposition à ".NET Client Profile" - qui est une version allégée) - je choisirais System.Web.

11
Serge Shultz

Utilisez WebUtility qui n'a pas besoin de référence spéciale.

1
wezten