Мне часто приходится иметь дело с документами XML, которые содержат элементы с именами, но не объявляют пространство имен. Например:Могу ли я использовать предопределенные пространства имен при загрузке XDocument?
<root>
<a:element/>
</root>
Поскольку префикс «a» никогда не назначается URI пространства имен, документ недействителен. Когда я загружаю такой документ XML, используя следующий код:
using (StreamReader reader = new StreamReader(new FileStream(inputFileName,
FileMode.Open, FileAccess.Read, FileShare.ReadWrite))) {
doc = XDocument.Load(reader, LoadOptions.PreserveWhitespace);
}
он генерирует исключение, указав (совершенно справедливо), что документ содержит необъявленную пространство имен и не очень хорошо образован.
Итак, могу ли я предопределить префикс пространства имен по умолчанию -> пары URI пространства имен для того, чтобы парсер снова вернулся? XMLNamespaceManager выглядит многообещающим, но не знает, как применить его к этой ситуации (или, если можно).
Спасибо , Марк. Работает большую часть пути. Проблема заключается в том, если я reserialize документ, я в конечном итоге с<элемент Xmlns = «HTTP: // Foo/бар» /> , который в то время как технически правильно, не сохраняет префикс пространства имен. Могу ли я сохранить префикс? –
hmmm ... ничего не бросается в глаза ... может быть, добавить объявления xmlns во время сериализации, а затем удалить их вручную? Yeuck. –