C# 删除xml中的xmlns属性,以获得简单的纯xml节点

C# 删除xml中的xmlns属性,以获得简单的纯xml节点,c#,xml,xslt,linq-to-xml,C#,Xml,Xslt,Linq To Xml,我正在使用以下代码 var xmlFile = fromConfiguration + @"xyz.xml"; XDocument document = XDocument.Load(xmlFile); var xElement = document.Root; xElement.Add(new XElement("elementName", "elementText")); document.Save(xmlFile); XDocument

我正在使用以下代码

    var xmlFile = fromConfiguration + @"xyz.xml";
    XDocument document = XDocument.Load(xmlFile);


    var xElement = document.Root;

    xElement.Add(new XElement("elementName", "elementText"));
    document.Save(xmlFile);
    XDocument documentN = XDocument.Load(xmlFile);
    XElement element = (from xml2 in documentN.Descendants("elementName")
                        select xml2).FirstOrDefault();

    element.RemoveAttributes();
    documentN.Save(xmlFile);
这给了我

 <elementName xmlns="">elementText</elementName>
elementText
默认情况下添加xmlns。 没有xmlns我可以添加什么吗

<elementName>elementText</elementName>
elementText
这就是我需要在xsl文件中解析的内容


有什么帮助吗?

通常,最好学习如何在名称空间中查找或选择元素,以及如何在这样做的情况下构造元素

xElement.Add(new XElement(xElement.Name.Namespace + "elementName", "elementText"));

您不存在
xmlns=“”

一个祖先元素必须设置默认名称空间的问题,例如

<foo xmlns="http://foo.bar">
  <!-- Your element name -->
</foo>
如果在不同的文件中可能有不同的名称空间,则可以通过编程方式确定默认名称空间-尽管它可能不是根元素的名称空间,例如

<other:foo xmlns="http://foo.bar" xmlns:other="http://surprise">
  <!-- This is still in http://foo.bar -->
  <elementName>elementText</elementName>
</foo>

元素文本

另一方面,我正在使用以下xsl,我已经检查过它只有在不存在xmlns的情况下才有效。我在这里遗漏了什么吗?谢谢它成功了:)希望我能吻你。过去两天我一直在磕头。我遗漏了xElement.Name.namespace请记住,这并不是万无一失的-请参阅我的答案,以获取一个它有效的示例uld失败。与此相关的内容是XDocument document=XDocument.Load(xmlFile);var xElement=XDocument.Root;这将提供根节点。如何查找将元素名称作为参数传递的特定节点?@Swaraj:这是一个完全不同的问题。请阅读LINQ to XML教程,如果仍然没有找到答案,请发布新问题。
XNamespace ns = "http://foo.bar";
xElement.Add(new XElement(ns + "elementName", "elementText"));
<other:foo xmlns="http://foo.bar" xmlns:other="http://surprise">
  <!-- This is still in http://foo.bar -->
  <elementName>elementText</elementName>
</foo>