2010-06-14 86 views
3

是否可以使用XmlDocument.CreateElement()和XmlNode.AppendChild()創建子類而不指定名稱空間並讓它使用「默認」名稱空間?創建xml文檔時的默認名稱空間

目前,如果我使用命名空間創建根節點,並且不在每個子節點上指定命名空間,則輸出xml將定義一個空白命名空間。

如果我沒有爲每個創建的元素指定名稱空間,則會生成以下內容。有沒有一個快捷方式,我不必每次都指定名稱空間?

<root xmlns="http://example.com"> 
    <child1 xmlns=""> 
    <child2 /> 
    </child1> 
</root> 

代碼:

XmlDocument doc = new XmlDocument(); 
var rootNode = doc.CreateElement("root", "http://example.com"); 
doc.AppendChild(rootNode); 
var child1Node = doc.CreateElement("child1"); 
rootNode.AppendChild(child1Node); 
var child2Node = doc.CreateElement("child2"); 
child1Node.AppendChild(child2Node); 

回答

8

如果您有創建XML文檔,並指定了層次結構中的每個元素相同的命名空間 - 這樣的事情:

 XmlDocument doc = new XmlDocument(); 

     const string xmlNS = "http://www.example.com"; 

     XmlElement root = doc.CreateElement("root", xmlNS); 
     doc.AppendChild(root); 

     XmlElement child1 = doc.CreateElement("child1", xmlNS); 
     root.AppendChild(child1); 

     child1.AppendChild(doc.CreateElement("child2", xmlNS)); 

     doc.Save(@"D:\test.xml"); 

那麼你會得到這個輸出文件:

<root xmlns="http://www.example.com"> 
    <child1> 
    <child2 /> 
    </child1> 
</root> 

<root>節點上的名稱空間沿層次結構繼承,除非子元素明確定義其他內容。

如果您使用doc.CreateElement創建新的XmlElement,並且未指定XML名稱空間,那麼當然,該新元素將具有空白名稱空間,因此這將被序列化到您擁有的XML文檔中。

我不知道有什麼方法可以指定一個默認命名空間,以便在您創建新元素時使用 - 如果您指定了一個元素,那麼該元素將使用該命名空間 - 如果您沒有指定它,則是空白命名空間。

2

如果您使用的是.NET 3.5,我建議使用LINQ to XML(System.Xml.Linq)。使用XDocument,XElement和XAttribute類。

但marc_s的回答是正確的,命名空間是繼承的。

+1

呃,marc_s的回答並沒有說這個名字空間是繼承的。它說你必須爲你創建的每個XML元素手動指定它。 – Jez 2015-02-12 10:39:07

相關問題