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

时间:2014-08-06 11:33:37

标签: 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 documentN = XDocument.Load(xmlFile);
    XElement element = (from xml2 in documentN.Descendants("elementName")
                        select xml2).FirstOrDefault();

    element.RemoveAttributes();
    documentN.Save(xmlFile);

这给了我..

 <elementName xmlns="">elementText</elementName>

默认添加xmlns。 有没有办法可以在没有xmlns的情况下添加?

<elementName>elementText</elementName>

这是我需要在xsl文件中解析的内容。

ANy帮助??

2 个答案:

答案 0 :(得分:2)

其中一个祖先元素必须设置默认命名空间,例如

<foo xmlns="http://foo.bar">
  <!-- Your element name -->
</foo>

如果你想:

<foo xmlns="http://foo.bar">
  <elementName>elementText</elementName>
</foo>

...那么这意味着elementName隐含在http://foo.bar的命名空间中,因为默认是继承的。所以你应该使用:

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>

答案 1 :(得分:0)

通常最好学习如何在命名空间中查找或选择元素以及如何构建它们,如果你这样做

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

您不会遇到xmlns="''

的问题