Ситуация
Я использую XDocument
, чтобы попытаться удалить атрибут xmlns=""
на первом внутреннем node:
<Root xmlns="http://my.namespace">
<Firstelement xmlns="">
<RestOfTheDocument />
</Firstelement>
</Root>
Итак, в результате я хочу:
<Root xmlns="http://my.namespace">
<Firstelement>
<RestOfTheDocument />
</Firstelement>
</Root>
Код
doc = XDocument.Load(XmlReader.Create(inStream));
XElement inner = doc.XPathSelectElement("/*/*[1]");
if (inner != null)
{
inner.Attribute("xmlns").Remove();
}
MemoryStream outStream = new MemoryStream();
XmlWriter writer = XmlWriter.Create(outStream);
doc.Save(writer); // <--- Exception occurs here
Проблема
При попытке сохранить документ я получаю следующее исключение:
Префикс '' не может быть переопределен с '' на 'http://my.namespace' в пределах одного и того же тега элемента запуска.
Что это значит и что я могу сделать, чтобы удалить этот pesky xmlns=""
?
Примечания
- Я хочу сохранить корневое пространство имен node
- Я хочу, чтобы только этот
xmlns
удалялся, в документе не будет других атрибутовxmlns
.
Update
Я пробовал использовать код, вдохновленный ответами на этот вопрос:
inner = new XElement(inner.Name.LocalName, inner.Elements());
При отладке атрибут xmlns
исчезает, но я получаю то же исключение.