2009-03-27 19 views
9

¿Qué pasa con eso? Parece que la única forma de obtener un objeto HtmlDocument en funcionamiento es copiar la propiedad Document de un control mshtml/webbrowser. Pero el desove es sloooooooooooow. Me gustaría evitar escribir mi propio analizador HTML y HtmlAgilityPack es copyleft.C#: objeto HtmlDocument no tiene constructor?

¿Hay otras fuentes de obtener un HtmlDocument instanciado que puedo volcar HTML de una cadena en?

O, ¿hay alguna manera de anular el molesto hábito de HtmlElement de provocar un ataque al utilizar InnerHtml/OuterHtml con etiquetas img y elementos tr?

Editar: Me refiero a System.Windows.Forms.HtmlDocument. Mis disculpas, todavía soy nuevo en C# y .Net y sé muy poco acerca de COM y algunas de las otras cosas que plantea este tema.

+0

que sería útil que usted ha dicho, que HtmlDocument está utilizando incluyendo el espacio de nombres o el nombre de la biblioteca. –

Respuesta

7

No tiene ningún constructor porque es solo una clase contenedora alrededor de un objeto no administrado.

Referencia: http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.aspx

HtmlDocument proporciona una envoltura alrededor logrado objeto documento de Internet Explorer, también conocido como el Modelo de Objetos de Documento HTML (DOM). Usted obtiene una instancia de HtmlDocument a través de la propiedad Document del control WebBrowser .

Dependiendo de lo que usted quiere, usted puede desear mirar en SGMLReader o la puesta al día community version.

+0

Gracias por el consejo sobre SGMLReader. Pude solucionar esto leyendo mi HTML en SGMLReader, convirtiéndolo en un documento XML y luego insertando ese código en mshtml.HTMLDocument. ¡Gracias! –

4

Programación robusta?

Al utilizar DOM a través del control WebBrowser, siempre debe esperar hasta que ocurra el evento DocumentCompleted antes de intentar acceder a la propiedad Document del control WebBrowser. El evento DocumentCompleted se genera después de que se haya cargado todo el documento; si usa DOM antes, arriesga causar una excepción de tiempo de ejecución en su aplicación.

http://msdn.microsoft.com/en-us/library/ms171712.aspx

Cuestiones relacionadas