Всякий раз, когда я вставляю элемент в свой документ xml, система добавляет к нему атрибут xmlns = "". Как мне от этого избавиться? Почему это там? Я использую очень простой linqtoxml.
У меня есть простой XML-файл (обратите внимание, что строки объявления Xml нет, и она содержит пространство имен):
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
</PropertyGroup>
</Project>
Я делаю следующее:
// 1. Read in the Xml file
XDocument testXml = XDocument.Load(@"C:\test.xml");
// 2. Add in the extra node
XNamespace ns = testXml.Root.Attribute("xmlns").Value; // Get the existing namespace
XElement newElement = new XElement("MyNewElement", "12345"); // Create the new element
testXml.Element( ns + "Project").Add( newElement ); // Insert the new element into the document
// 3. Write To Disk (without the xml header line)
TextWriter tw = File.CreateText(@"C:\test2.xml");
tw.Write(testXml.ToString());
tw.Close();
При просмотре файла я получаю:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup></PropertyGroup>
<MyNewElement xmlns="">12345</MyNewElement>
</Project>
Мне нужно избавиться от бита xmlns = "".
Я считаю, что необходимо добавить пространство имен при добавлении нового элемента, потому что исходный документ имеет пространство имен. Я попытался вставить элемент с помощью:
testXml.Element( "Project").Add( newElement );
но он продолжал давать мне исключение нулевой ссылки, которое я предполагаю, потому что элементу нужно имя пространства имен.
Я думал о его повторном анализе и удалении всех свойств xmlns = "", но, похоже, он не работает; Я продолжаю получать исключение нулевой ссылки. Вероятно, здесь есть какое-то фундаментальное понимание пространств имен, которых мне не хватает, но я оглянулся и, похоже, не нашел никаких подсказок.
Может ли кто-нибудь указать мне правильное направление с этим?
Приветствие
Джек.