【发布时间】:2010-02-25 00:07:29
【问题描述】:
如果一个节点属于一个命名空间,它的子节点默认属于同一个命名空间。所以不需要为每个孩子提供xmlns 属性,这很好。
但是。
如果我像这样创建两个节点:
Dim parent = <parent xmlns="http://my.namespace.org"/>
Dim child = <child xmlns="http://my.namespace.org">value</child>
parent.Add(child)
Console.WriteLine(parent.ToString)
结果是这样的:
<parent xmlns="http://my.namespace.org">
<child xmlns="http://my.namespace.org">value</child>
</parent>
但是,如果以不太方便的方式创建它们:
Dim parent = <parent xmlns="http://my.namespace.org"/>
Dim child As New XElement(XName.Get("child", "http://my.namespace.org")) With {.Value = "value"}
parent.Add(child)
Console.WriteLine(parent.ToString)
结果更理想:
<parent xmlns="http://my.namespace.org">
<child>value</child>
</parent>
显然,我更喜欢使用第一种方式,因为它更加直观且易于编码。还有另一个不使用方法 2 的原因——有时我需要使用XElement.Parse 创建节点,解析一个包含xmlns 属性的字符串,这会产生与方法 1 完全相同的结果。
所以问题是——我如何获得方法 2 的漂亮输出,像方法 1 一样创建节点?我看到的唯一选择是创建一个可以克隆给定 XElement 的方法,根据方法 2 模式有效地重新创建它,但这看起来很难看。我正在寻找一个更明显的解决方案,但由于某种原因被忽略了。
【问题讨论】:
-
@GSerg:下面的答案能回答你的问题吗?
标签: vb.net linq linq-to-xml