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

Я хочу загрузить 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 Ответ

31 голосов
/ 28 октября 2010

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