Ответ 1
Эдвин дал вам решение, и я даю вам причину падения соединения:
http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic/
Почему метод System.Xml.XmlDocument.LoadXml
throw 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)
Что вызывает причина исключения?
Эдвин дал вам решение, и я даю вам причину падения соединения:
http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic/
Внутренний XmlReader XmlDocument использует XmlResolver для загрузки внешних ресурсов. Вы должны предотвратить открытие DTD, установив для параметра XmlResolver
значение null и установку DtdProcessing
игнорировать. Это можно сделать, применив объект 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