Dot-Net

為什麼 XmlDocument.LoadXml 會拋出 System.Net.WebException?

  • September 12, 2011

為什麼System.Xml.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)

到底是什麼導致了異常?

Edwin 給了你解決方案,我給你連接斷開的原因:

http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic/

XmlDocument 的內部 XmlReader 使用 XmlResolver 載入外部資源。XmlResolver您應該通過將 設置為 null 並設置DtdProcessing為忽略來防止打開 DTD 。這可以通過將XmlReaderSettings對象應用到新的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

引用自:https://stackoverflow.com/questions/7388949