2010-10-28 65 views
11

我想加載一個XmlNode而沒有得到一個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實例?

回答

29

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; 
} 
+0

謝謝。這符合需求,非常簡單。 – 2010-10-28 04:19:18