在c#中为root xelement元素添加/创建名称空间

时间:2009-05-22 18:49:27

标签: c# linq-to-xml

我正在使用linq.xml通过xelement创建xml。 我的雇佣关系是这样的事情

我想要这个架构          2     海峡     

这是我的模式生成代码

 XNamespace ns = XNamespace.Get("urn:APISchema.xsd");
 root = new XElement(ns + "Foo");
 root.Add(new XElement("version", "2"));
 root.Add(new XElement("foochild", "str"));

但结果架构是

<Foo xlmns="urn:APISchema.xsd">
<version xlmns="">2</version>
<foochild xlmns="">str</foochild>
</Foo>

任何想法为什么这样的问题为什么它将xlmn附加到root childs??

4 个答案:

答案 0 :(得分:2)

root.Add(new XElement(namespace + "foo", "str"))

编辑:进一步搜索SO时,this question似乎正在解决同样的问题。

答案 1 :(得分:0)

你添加了元素'usr:APISchema.xsd :: Foo'两个没有命名空间的元素。结果XML是预期的。您必须将名称空间添加到每个添加的元素:root.Add(new XElement(namespace + "foochild")

答案 2 :(得分:0)

XNamespace myNameSpace = XNamespace.Get("urn:APISchema.xsd");
        root = new XElement(myNameSpace + "Foo",
                                new XElement(myNameSpace + "foo", "str"));

IMO这更容易阅读。但正如理查德所说,你只需要添加命名空间。

答案 3 :(得分:0)

XNamespace myNamespace = XNamespace.Get("urn:APISchema.xsd");
root = new XElement(myNamespace + "Foo",
    new XElement(myNamespace + "version", "2"),
    new XElement(myNamespace + "foochild", "str"));

给它一个镜头,它应该为你做的。