linq-to-xml - 向现有XDocument添加 namespace

标签 linq-to-xml

我需要使用Linq to xml处理一些xml文件。

我有一个已加载的现有XDocument

现在,我似乎无法向其添加 namespace 。

我做:

//Load an existing xml into a XDocument
XDocument xdoc=XDocument.Load(myXml);

//Create a namespace
 XNamespace myNS="http://www.w3.org/2001/XMLSchema-instance/MyShinyNewNamespace";
 xAttribute myAttr=new XAttribute(XNamespace.Xmlns +"myNS",myNS);

  //Add new namepsace to root

 xdoc.Root ????

What do you do here?

如何检索我的 namespace ?

如何删除/更换?

非常感谢

最佳答案

首先,虽然XML标记允许您使用

<root xmlns="http://example.com/ns">
  <foo>
    <bar>baz</bar>
  </foo>
</root>

使用单个 namespace 声明属性将根元素以及所有后代元素放入声明的 namespace 中,当您操作树模型时,您需要更改所有元素的Name,因此需要
XNamespace myNs = "http://example.com/ns";

foreach (XElement el in xdoc.Descendants()) 
{
  el.Name = myNs + el.Name.LocalName;
}

如果您还想设置某个前缀pf,则另外设置
  xdoc.Root.Add(new XAttribute(XNamespace.Xmlns + "pf", myNs));

关于linq-to-xml - 向现有XDocument添加 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294497/

相关文章:

c# - 在 Linq to XML 中检查节点是否存在

c# - XDocument.Descendants 不返回后代

c# - 如果没有找到元素,如何解析 xml 文件并返回默认值

c# - 我如何使用 linq to xml 在 xml 文件中添加新标签

c# - 如何有条件地以不太冗长的方式写出 XML?

c# - 在 C# 中从 rss 提要中提取数据

c# - 如何从节点 xml 获取属性

asp.net - 从HTTP POST请求有效载荷中检索XML

c# - XDocument.Save(string filename)是重新保存整个文件还是只是更改?

c# - 如何将 byte[] 响应转换为有效的 XDocument?