Chaque fois que j'insère un élément dans mon document xml, le système lui ajoute un attribut xmlns="". Comment puis-je m'en débarrasser ? Pourquoi est-il là ? J'utilise un linqtoxml très simple.
J'ai un fichier XML simple (Notez qu'il n'y a pas de ligne de déclaration Xml et qu'il contient un espace de noms) :
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
</PropertyGroup>
</Project>
Je procède comme suit :
// 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();
Lors de l'affichage du fichier, j'obtiens :
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup></PropertyGroup>
<MyNewElement xmlns="">12345</MyNewElement>
</Project>
Je dois me débarrasser de l'élément xmlns="". Je pense qu'il faut inclure l'espace de noms lors de l'ajout d'un nouvel élément parce que le document d'origine a un espace de noms. J'ai essayé d'insérer l'élément avec :
testXml.Element( "Project").Add( newElement );
Mais je n'ai cessé de recevoir une exception de référence nulle, et je suppose que c'est parce que l'élément a besoin du nom de l'espace de noms.
J'ai pensé à l'analyser une deuxième fois et à supprimer toutes les propriétés xmlns="", mais cela ne semble pas fonctionner ; je continue à obtenir l'exception de la référence nulle. Il y a probablement une compréhension fondamentale des espaces de noms qui me manque ici, mais j'ai regardé autour de moi et je n'ai pas l'impression de trouver des indices.
Quelqu'un peut-il m'indiquer la bonne direction à suivre ?
Santé Jack.