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.
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
) et des caractères codés tels que '
ainsi que.
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.
Utilisez WebUtility qui n'a pas besoin de référence spéciale.