Comment puis-je manipuler le DOM à partir d’une chaîne HTML en C #?

Pour le moment, le meilleur moyen que j’ai trouvé de pouvoir manipuler DOM à partir d’une chaîne contenant du HTML est:

WebBrowser webControl = new WebBrowser(); webControl.DocumentText = html; HtmlDocument doc = webControl.Document; 

Il y a deux problèmes:

  1. Requiert l’object WebBrowser !
  2. Cela ne peut pas être utilisé avec plusieurs threads; J’ai besoin de quelque chose qui fonctionnerait sur un thread différent (autre que le thread principal).

Des idées?

J’ai fait une recherche sur GooglePlex pour HTML et j’ai trouvé Html Agility Pack. Je ne sais pas si c’est pour ça ou non, je le télécharge maintenant pour essayer.

Selon ce que vous essayez de faire (vous pouvez peut-être nous donner plus de détails?) Et selon que le code HTML est correctement formé ou non, vous pouvez le convertir en XmlDocument :

 System.Xml.XmlDocument x = new System.Xml.XmlDocument(); x.LoadXml(html); // as long as html is well-formed, ie XHTML 

Ensuite, vous pouvez le manipuler facilement, sans l’instance WebBrowser . En ce qui concerne les threads, je ne connais pas suffisamment l’implémentation de XmlDocument pour connaître la réponse à cette partie.


Si le document ne se présente pas correctement, vous pouvez utiliser NTidy (wrapper .NET pour HTML Tidy ) pour le mettre en forme en premier lieu; Une fois, j’ai dû faire la même chose pour un projet et ce n’était pas trop grave.

JasonBunting a déjà posté cela, mais ça marche vraiment d’utiliser un wrapper .net autour du rangement HTML et de le charger dans un XmlDocument.

J’ai déjà utilisé ce wrapper .net auparavant:

http://www.codeproject.com/KB/cs/ZetaHtmlTidy.aspx

Et l’a implémenté un peu comme ceci:

 ssortingng input = "

crappy html
"; HtmlTidy tidy = new HtmlTidy() ssortingng output = tidy.CleanHtml(input, HtmlTidyOptions.ConvertToXhtml); XmlDocument doc = new XmlDocument(); doc.LoadXml(output);

Désolé si considéré comme un repost 🙂

C’est une vieille question. Maintenant il y a:

  • Le pack d’agilité HTML (vous l’avez déjà trouvé)
  • CsQuery , un port .Net jQuery, qui conviendra parfaitement aux développeurs jQuery