13

認識されていない名前空間が存在する場合 、 XmlExceptionを取得せずにXmlNodeをロードしたいと考えています。

その理由は、XMLNode インスタンスをメソッドに渡す必要があるためです。元のコンテキストとは異なる名前空間を持つ任意の XML フラグメントをロードしています (たとえば、名前空間プレフィックスでコンテンツを「汚染」するさまざまなスキーマを持つ MSWord の書式設定やその他のソフトウェア製品)。名前空間は、私にとって、またはそれが渡されるターゲット メソッドにとって重要ではありません。(これは、ターゲット メソッドがそれをレンダリング用の HTML として使用し、名前空間が無視されるか、自然に抑制されるためです。)


以下は、XMLNode を作成しようとしているフラグメントの例です。

 <p>
 <div>
     <st1:country-region w:st="on">
     <st1:place w:st="on">Canada</st1:place>
     </st1:country-region>
     <hr />
     <img src="xxy.jpg" />
 </div>
 </p>

それをXmlDocumentインスタンスにロードしようとすると(これが XmlNode を取得しようとする試みです)、次の XML 例外が発生します。

「st1」は宣言されていない名前空間です。3 行目、251 桁目。

そのような XML フラグメントから XmlNode インスタンスを取得するにはどうすればよいですか?

4

1 に答える 1

31

XmlTextReaderNamespacesオフにできるプロパティがあります。

XmlDocument GetXmlDocumentFromString(string xml) {
    var doc = new XmlDocument();

    using (var sr = new StringReader(xml))
    using (var xtr = new XmlTextReader(sr) { Namespaces = false })
        doc.Load(xtr);

    return doc;
}
于 2010-10-28T04:10:24.380 に答える