为什么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)
究竟是什么造成了例外?
答案 0 :(得分:8)
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
答案 1 :(得分:4)
Edwin给了你解决方案,我告诉你连接丢失的原因:
http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic/