2014-02-12 91 views
0

我在做什麼是我有2個XML模板,我用它來快速創建一個XML文檔。我首先替換模板#2中的數據,然後將用它替換模板#1中的元素。我可以成功替換,但是插入到模板#1中的節點具有延續的emtpy xmlns。防止空xmlns - ReplaceWith()Linq

例如:

模板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") 

我想只有根元素包含的命名空間。任何想法如何解決這個問題?

+1

我懷疑這是因爲您將XML視爲文本。不是。命名空間是XML包含的信息的重要部分。如果'Replace'沒有'xmlns =「」',那就意味着它是'namespace'命名空間中的'Replace'元素,而不是任何其他'Replace'元素與其他任何命名空間。如果是這樣,爲什麼它不在模板2中的名稱空間中? –

+0

我嘗試在模板#2中包含相同的名稱空間,因爲它最終將具有與模板#1相同的名稱空間。但是,當我這樣做時,元素都有名稱空間。 – jnasty

+0

在這種情況下,應該沒有關係。從信息的角度來看,'和'包含*完全相同*信息。 –

回答

1

如果我們與您的第二個變體去(在那裏你想Replace是在namespace並有模板),那麼最後一行應該僅僅是:

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

SaveOptions

+0

高五!這正是我所期待的,也是如此簡單。當我獲得更多代表時,我會回來查看這個答案。 – jnasty

+0

我回來了哈哈。 :P – jnasty