2011-09-12 62 views
10

爲什麼System.Xml.XmlDocument.LoadXml方法拋出System.Net.WebException爲什麼XmlDocument.LoadXml會拋出System.Net.WebException?

這真是令人難以置信的瘋狂,如果MSDN是對的,LoadXml應該最多給我一個System.Xml.XmlException

我卻奇怪的例外,如:

基礎連接已關閉:連接被意外關閉。

Dim document As New XmlDocument 
document.LoadXml("<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd""><x></x>") 
MsgBox(document.LastChild.Name) 
究竟什麼

引起的異常?

+4

** [TL; DR(HTTP://en.wikipedia。 org/wiki/Wikipedia:Too_long; _didn%27t_read)** ...通過逐漸減少XML直到問題消失,嘗試自己找到此問題的來源。之後用一個簡明的例子更新你的問題。 –

+0

@Daniel ok編輯 – Pacerier

+0

我假設正在解析DOCTYPE聲明,因爲如果DOCTYPE被刪除,它將無誤地工作。 – Paul

回答

7

XmlDocument的內部XmlReader使用XmlResolver加載外部資源。您應該通過將XmlResolver設置爲空並將DtdProcessing設置爲忽略來阻止打開DTD。這可以通過將​​對象應用到新的XmlReader來完成。然後可以使用此讀取器將XML加載到XmlDocument中。這應該可以解決你的問題。

Dim doc As New XmlDocument() 
    Dim settings As New XmlReaderSettings() 
    settings.XmlResolver = Nothing 
    settings.DtdProcessing = DtdProcessing.Ignore 

    Using sr As New StringReader("<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd""><x></x>") 
     Using reader As XmlReader = XmlReader.Create(sr, settings) 
      doc.Load(reader) 
     End Using 
    End Using 
+2

這也可以通過在調用Load()或LoadXml()之前將XmlDocument的XmlResolver屬性設置爲Nothing來完成。 – Paul

相關問題