如果一個節點屬於一個名稱空間,那麼它默認情況下的子節點屬於同一名稱空間。所以不需要爲每個孩子提供xmlns
屬性,這很好。LINQ to XML:抑制子節點中的冗餘名稱空間屬性
但是,
如果我創建這樣兩個節點:
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:下面的答案是否回答你的問題? – 2010-04-09 07:13:47