设置XML命名空间在子项中将其设置为空

时间:2014-03-17 22:09:42

标签: c# xml xml-namespaces

我想在一个有效的XML文件中设置根元素的命名空间:

XDocument doc = new XDocument(new XDeclaration("1.0", "utf-8", "no"));
XNamespace ns = @"http://mynamespace.de/test";
doc.Add(new XElement(ns + "RootElement"));
doc.Root.Add(new XElement("SomeChildElement"));

但是直接子元素确实有一个空的xmlns属性。我怎么能避免这种情况?我只想在根元素中设置名称空间。

1 个答案:

答案 0 :(得分:2)

  

但是直接子元素确实有一个空的xmlns属性。我怎么能避免这种情况?

您也可以为子元素指定命名空间:

doc.Root.Add(new XElement(ns + "SomeChildElement"));

重点是元素继承了最接近的xmlns=...命名空间规范。当您使用new XElement("SomeChildElement")实际创建具有命名空间URI的元素时,因此需要xmlns=""才能为其提供正确的命名空间。如果你想:

<RootElement xmlns="http://mynamespace.de/test">
  <SomeChildElement />
</RootElement>

然后你真的想要一个SomeChildElement元素与根元素具有相同的命名空间 - 这就是我答案顶部的代码会给你的。

请注意,顺便说一句,您不需要命名空间的逐字字符串文字 - 常规字符串文字很好,因为URI不包含任何反斜杠或新行:

XNamespace ns = "http://mynamespace.de/test";