Как загрузить объект XmlNode, игнорируя незаявленные пространства имен?

Я хочу загрузить XmlNode, не получив XmlException, когда присутствует непризнанное пространство имен.

Причина в том, что мне нужно передать экземпляр 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.

Как мне получить экземпляр XmlNode из такого XML-фрагмента?

Ответ 1

XmlTextReader имеет свойство Namespaces, которое вы можете отключить:

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