2009-03-27 9 views
9

Che succede? Sembra che l'unico modo per ottenere un oggetto HtmlDocument funzionante copi la proprietà Document di un controllo mshtml/webbrowser. Ma la generazione che genera è sloooooooooooow. Mi piacerebbe evitare di scrivere il mio parser HTML e HtmlAgilityPack è copyleft.C#: oggetto HtmlDocument non ha costruttore?

Esistono altre fonti per ottenere un HtmlDocument istanziato in cui posso scaricare l'HTML da una stringa?

Oppure, c'è un modo per ignorare l'abitudine fastidiosa di HtmlElement di lanciare un adattamento quando si utilizza InnerHtml/OuterHtml con tag img e tr elementi?

Modifica: mi riferisco a System.Windows.Forms.HtmlDocument. Le mie scuse, sono ancora nuovo in C# e .Net e conosco pochissimo su COM e alcune delle altre cose che questo argomento fa apparire.

+0

sarebbe d'aiuto se lei ha detto che si sta utilizzando HtmlDocument includendo lo spazio dei nomi o il nome della libreria. –

risposta

7

Non ha costruttore perché è solo una classe wrapper attorno a un oggetto non gestito.

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

HtmlDocument offre invece una gestito wrapper oggetto documento di Internet Explorer, noto anche come il Document Object Model HTML (DOM). Si ottenere un'istanza di HtmlDocument tramite la proprietà Documento del controllo WebBrowser .

A seconda di ciò che si desidera per, si consiglia di guardare al SGMLReader o l'up-to-date community version.

+0

Grazie per il suggerimento su SGMLReader. Sono stato in grado di aggirare questo problema leggendo il mio HTML in SGMLReader, convertendolo in un documento XML e quindi inserendo quel codice nel mshtml.HTMLDocument. Grazie! –

4

Programmazione robusta?

Quando si utilizza il DOM tramite il controllo WebBrowser, è necessario attendere fino a quando si verifica l'evento DocumentCompleted prima di tentare di accedere alla proprietà Document del controllo WebBrowser. L'evento DocumentCompleted viene generato dopo che è stato caricato l'intero documento; se si utilizza il DOM prima di allora, si rischia di causare un'eccezione run-time nell'applicazione.

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

Problemi correlati