防止空xmlns - ReplaceWith()Linq

时间:2014-02-12 15:35:48

标签: .net xml linq

我正在做的是我有2个XML模板,用于快速创建XML文档。我首先替换模板#2中的数据,然后将其用于替换模板#1中的元素。我可以成功替换,但是我插入模板#1的节点有一个延迟的emtpy xmlns。

例如:

模板1

<root xmlns="namespace">
  <Replace/>
</root>

则Template2

<Replace>
  <child/>
</Replace>

我的最终结果是:

<root xmlns="namespace">
 <Replace xmlns="">
  <child/>
 </Replace>
</root>

如果我在模板#2中包含相同的命名空间,我最终得到这个:

<root xmlns="namespace">
 <Replace xmlns="namespace">
  <child/>
 </Replace>
</root> 

这是我的代码:

Imports <xmlns:ns="namespace">

Dim xDoc As XDocument = XDocument.Load("Template1.xml")
Dim replaceDoc As XDocument = XDocument.Load("Template2.xml")

Dim x = From elem As XElement In xDoc.<ns:root>.<ns:Replace>.First
x.ReplaceWith(replaceDoc.Elements)

xDoc.Save("Final.xml")

我希望只有root元素才能包含命名空间。知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

如果我们使用您的第二个变体(您希望Replace位于namespace并且在模板中有此变体),那么最后一行应该是:

xDoc.Save("Final.xml",SaveOptions.OmitDuplicateNamespaces)

SaveOptions