将元素插入xml会产生不必要的属性xmlns=

将元素插入xml会产生不必要的属性xmlns=,xml,properties,namespaces,linq-to-xml,xml-namespaces,Xml,Properties,Namespaces,Linq To Xml,Xml Namespaces,每当我在xml文档中插入一个元素时,系统都会向其添加一个xmlns=”“属性。我怎样才能摆脱它?为什么在那里?我使用非常简单的linqtoxml 我有一个简单的XML文件(注意没有XML声明行,它包含一个名称空间): 查看我得到的文件时: <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> <Proper

每当我在xml文档中插入一个元素时,系统都会向其添加一个xmlns=”“属性。我怎样才能摆脱它?为什么在那里?我使用非常简单的linqtoxml

我有一个简单的XML文件(注意没有XML声明行,它包含一个名称空间):

查看我得到的文件时:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
  <PropertyGroup></PropertyGroup>
  <MyNewElement xmlns="">12345</MyNewElement>
</Project>
但是它一直给我一个null referece异常,我认为这是因为元素需要名称空间名称

我想再次解析它并删除所有的xmlns=”“属性,但它似乎不起作用;我一直得到空引用异常。我在这里可能对名称空间缺乏一些基本的理解,但我环顾四周,似乎找不到任何提示

谁能用这个给我指出正确的方向吗

干杯 杰克。

XMLNS是“XML命名空间”——基本上,它的概念与C++命名空间、java/C包等是相同的,除了用于解析不同的变量(如XSD、DTD)。 您创建MyNeWestEt而不指定其命名空间,因此您的DOM树将其解释为空白命名空间。由于您的文档根目录指定了一个非空名称空间,因此它插入的xmlns=”“声明根据您的代码是正确的。在将MyNewElement添加到文档之前,需要在MyNewElement上指定名称空间。我不熟悉LinQ XML API,但我知道在一个早期版本的.Net XML解析器中,建议使用

CreateElement()
调用来自
XmlDocument
实例的
CreateElement()
来正确提升这些设置

根据项目元素的查找代码进行粗略猜测,但根本不知道LinQ,请尝试更改:

XElement newElement = new XElement("MyNewElement", "12345");
致:


这不是问题的答案,但我还是想告诉你

可以使用保存方法将xdocument保存到文件:

XDocument testXml = XDocument.Load(@"C:\test.xml");
...
testXml.Save(@"c:\test.xml"); 

不需要使用文本编写器

您必须有意将名称空间放入xml字符串中,如:

<serveur nom='nouveau serveur'  xmlns='urn:myLogConfig'>
XElement newElement = new XElement("MyNewElement", "12345");
XElement newElement = new XElement(ns + "MyNewElement", "12345");
XDocument testXml = XDocument.Load(@"C:\test.xml");
...
testXml.Save(@"c:\test.xml"); 
<serveur nom='nouveau serveur'  xmlns='urn:myLogConfig'>
myXelement.SetAttributeValue("xmlns", Nothing)