将具有相同地址的多个namespac添加到XDocument

时间:2011-09-08 13:01:17

标签: c# .net xml linq

我需要将多个名称空间添加到具有相同地址(C#)的xdocument

<root xmlns:f="urn://xml.voodoo.net/vd/formating-1.0" xmlns="urn://xml.voodoo.net/vd/formating-1.0">
 <a:something>stuff and more stuff</a:something>
</root>

如果我使用以下代码添加..它只显示xmlns:f

XNamespace defaultNS = "urn://xml.voodoo.net/vd/formating-1.0";
XNamespace f = "urn://xml.voodoo.net/vd/formating-1.0";


XElement rootElement = new XElement(defaultNS + "root",
new XAttribute(XNamespace.Xmlns + "f", f.NamespaceName),

如何显示2个命名空间?它甚至可能吗?

2 个答案:

答案 0 :(得分:2)

您的XML示例不正确,未使用'f'命名空间,而存在'a'命名空间。

您的C#代码与您的XML不匹配,它会创建一个具有属性的元素。

无论如何,XML文档中的命名空间定义只有在您实际使用它时才有意义。如果您通过C#代码创建XML文档,它将生成语义正确的XML,但可能与您示例的语法不匹配。

答案 1 :(得分:2)

var doc = new XDocument(
    new XElement(defaultNS + "root",

        new XAttribute(XNamespace.Xmlns + "f", defaultNS),
        new XAttribute("xmlns", defaultNS),
        new XElement(defaultNS + "something",
            new XAttribute(XNamespace.Xmlns + "f", defaultNS), "stuff and more stuff")
            )
    );

期望的输出:

<root xmlns:f="urn://xml.voodoo.net/vd/formating-1.0" xmlns="urn://xml.voodoo.net/vd/formating-1.0">
  <f:something xmlns:f="urn://xml.voodoo.net/vd/formating-1.0">stuff and more stuff</f:something>
</root>