2011-09-12 13 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

関連する問題