2008-10-23 17 views
5

Por el momento, la mejor manera que he encontrado para ser capaz de manipular DOM de una cadena que contiene HTML es:¿Cómo puedo manipular el DOM desde una cadena de HTML en C#?

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

hay dos problemas:

  1. Requiere el objeto WebBrowser!
  2. Esto no se puede usar con varios hilos; Necesito algo que funcione en un hilo diferente (que no sea el hilo principal).

¿Alguna idea?

+0

http://msdn.microsoft.com /es-es/library/aa290341%28v=vs.71%29.aspx – ThunderGr

Respuesta

16

Hice una búsqueda en GooglePlex para HTML y encontré Html Agility Pack No sé si es por eso o no, lo estoy descargando ahora mismo para intentarlo.

+1

Html Agility Pack es impresionante –

+0

Lo mismo - De hecho, estaba a punto de recomendar el uso de HTML Tidy para obtener el documento en buen estado y luego convertirlo en un XmlDocument, pero tal vez pueda omitirlo con HTML Agility Pack. Buen material. –

+0

¡El paquete de agilidad funciona bien con HTML e hilo! ¡Tengo mi respuesta! ¡Todo! –

6

Dependiendo de lo que está tratando de hacer (tal vez usted puede darnos más detalles?) Y en función de si o no está bien formado el HTML, podría convertir esto en un XmlDocument:

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

Luego puede manipularlo fácilmente, sin la instancia WebBrowser. En cuanto a los hilos, no sé lo suficiente sobre la implementación de XmlDocument para conocer la respuesta a esa parte.


Si el documento no está en forma adecuada, podría utilizar NTidy (envoltorio NET para HTML Tidy) para obtener en forma en primer lugar; Tuve que hacer esto mismo para un proyecto una vez y realmente no fue tan malo.

+0

Es posible que el documento no esté bien formateado. Es por eso que XmlDocument podría no funcionar, pero agradezco la alternativa. –

5

JasonBunting ya publicó esto, pero realmente funciona para usar un contenedor .net alrededor de HTML tidy y cargarlo en un XmlDocument.

He utilizado este envoltorio .net antes:

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

Y implementado algo como esto:

string input = "<p>crappy html<br <img src=foo></div>"; 
HtmlTidy tidy = new HtmlTidy() 
string output = tidy.CleanHtml(input, HtmlTidyOptions.ConvertToXhtml); 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(output); 

En este momento, si se considera un repost :)

1

Ésta es una vieja pregunta Ahora hay:

  • The HTML Agility Pack (Usted ya ha encontrado este)
  • CsQuery, un puerto .Net jQuery, que será muy bueno para los desarrolladores de jQuery
Cuestiones relacionadas