2009-04-29 67 views
4

我想擺脫我的xml文件中的空名稱空間標籤。我見過的所有解決方案都是基於從頭開始創建xml。我有從以前的XML構造的各種元素。我所做的全部是linq to xml - 擺脫空白的xmlns

XElement InputNodes = XElement.Parse(InputXML); 
m_Command = InputNodes.Element("Command"); 

並且它在每個地方都加入了xmlns =「」。這真的很令人生氣。謝謝你的幫助。

回答

0

可能是這樣:Empty namespace using Linq Xml

這表明你的文件是不是添加元素的不同的默認命名空間。

+0

這就是問題所在,但我無法以這種方式構建我的xelements,因爲我已經從另一個xml文檔中獲得了其中的一半 – Steve 2009-04-29 18:38:47

+0

您只需確保文檔的名稱空間和插入的元素匹配。如果他們不這樣做,那麼每個偏離默認值的元素都會得到它自己的xmlns屬性,所以差異會保存在XML文件中。 – Tomalak 2009-04-29 18:41:22

8

MSDN博客上有一個post,顯示如何輕鬆解決此問題(合理)。 outputing的XML之前,你要執行這個代碼:

foreach (XElement e in root.DescendantsAndSelf()) 
{ 
    if (e.Name.Namespace == string.Empty) 
    { 
     e.Name = ns + e.Name.LocalName; 
    } 
} 

替代,作爲海報提到,是每一個前綴元素名稱與您添加它的命名空間,但是這似乎是一個更好的解決方案它更自動化並節省了一些打字的時間。

0

我覺得第二個答案倒在這篇文章:

XElement Add function adds xmlns="" to the XElement

是非常有用的。基本上如果你只是做

XNamespace rootNamespace = doc.Root.Name.NamespaceName; 
XElement referenceElement = new XElement(rootNamespace + "Reference"); 

這應該解決它。所以我猜你必須告訴它在創建元素時不要擔心特殊的命名空間。奇。