【问题标题】:adding/creating namespace to root xelement element in c#在 C# 中向根 xelement 元素添加/创建命名空间
【发布时间】:2009-05-22 18:49:26
【问题描述】:

我正在通过 xelement 使用 linq.xml 创建 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 附加到根子节点...?

【问题讨论】:

    标签: c# linq-to-xml


    【解决方案1】:
    root.Add(new XElement(namespace + "foo", "str"))
    

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

    【讨论】:

    • 顺便说一句,“命名空间”是一个错误的变量名 :)
    • @root.Add(new XElement(namespace + "foo", "str")) 不,它不会产生所需的结果......因为我的 xml 更长......关于命名空间是的!我同意它的错误变量名:) 但它只是上面代码示例的错字。
    • 每个元素都有一个命名空间,因此当您不在元素名称前面使用 XNamespace 时,XElement 构造函数假定您的意思是用“”覆盖父命名空间。简而言之,您需要将命名空间添加到所有内容......在 SO 相关框中查看右侧,此链接可能会有所帮助。 stackoverflow.com/questions/477962/…
    • 这对我来说似乎很奇怪,我需要为每一点添加命名空间......无论如何谢谢。
    【解决方案2】:

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

    【讨论】:

    • 我只是想为根元素添加命名空间。请您提供更多细节。
    【解决方案3】:
    XNamespace myNameSpace = XNamespace.Get("urn:APISchema.xsd");
            root = new XElement(myNameSpace + "Foo",
                                    new XElement(myNameSpace + "foo", "str"));
    

    IMO 这更容易阅读。但正如 Richard 所说,您只需要添加命名空间。

    【讨论】:

    • David...我提供的示例 xml 只是示例...我的实际 xml 包含更多嵌套元素并且它有点动态..所以我不能使用这个...什么我是 doig 正在创建一个带有命名空间的根元素,而不是向它添加元素......唯一的问题是它也将 xmlns="" 显示给根级子级,我不想要......
    • 您是如何构建动态 XML 的?您必须像在根目录中所做的那样将命名空间添加到每个子节点,如果您可以发布一个示例来说明如何构建动态它可能会有所帮助。
    【解决方案4】:
    XNamespace myNamespace = XNamespace.Get("urn:APISchema.xsd");
    root = new XElement(myNamespace + "Foo",
        new XElement(myNamespace + "version", "2"),
        new XElement(myNamespace + "foochild", "str"));
    

    试一试,它应该对你有用。

    【讨论】:

      猜你喜欢
      • 2012-08-16
      • 1970-01-01
      • 2011-10-22
      • 2017-11-27
      • 1970-01-01
      • 2011-02-10
      • 2016-05-10
      • 2010-09-24
      • 1970-01-01
      相关资源
      最近更新 更多