Почему XmlDocument.LoadXml передает System.Net.WebException?

Почему метод 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)

Что вызывает причина исключения?

Ответ 2

Внутренний 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