2008-09-23 17 views
0

Quelqu'un at-il fait cela? Fondamentalement, je veux utiliser le HTML en gardant les balises de base telles que h1, h2, em, etc; nettoyez toutes les adresses non-http dans le fichier img et les tags; et HTMLEncode tous les autres tags.Comment htmlencode-tu en utilisant le pack d'agilité html?

Je suis bloqué à la partie HTML Encoding. Je sais que pour supprimer un nœud, vous faites un "node.ParentNode.RemoveChild (node);" où node est l'objet de la classe HtmlNode. Au lieu de supprimer le nœud, je veux le HTMLEncode.

Répondre

1

Vous devez supprimer le noeud représentant l'élément que vous ne voulez pas. Le code HTML codé devrait alors être ajouté à nouveau en tant que nœud de texte.

Si vous ne voulez pas traiter les enfants des éléments que vous voulez jeter, vous devriez être en mesure d'utiliser juste outerHTML ... quelque chose comme ça pourrait fonctionner:

node.AppendChild(new HtmlTextNode { Text = HttpUtility.HtmlEncode(nodeToDelete.OuterHtml) }); 
0

La réponse Au-dessus, cela couvre à peu près tout. Cependant, il y a une chose à ajouter.

Vous ne voulez pas modifier un nœud particulier, mais tous, donc le code ci-dessus sera probablement une méthode, enveloppée dans une instruction if (pour vous assurer que c'est une balise que vous voulez HtmlEncode). Plus précisément, étant donné que Agility Pack n'expose pas les nœuds par ordinal, vous ne pouvez pas itérer le document entier. La récursion est la façon la plus simple de s'y prendre. Vous avez probablement le savent déjà ...

J'ai abordé un problème similaire, et ont un code shell (C#) vous êtes plus que bienvenus à utiliser: http://dev.forrestcroce.com/normalizer-of-web-pages-qualifier-of-urls/2008-12-09/