2009-03-05 29 views
3

我將XmlWriter與Xml Serialization結合使用。我能夠輸出XML,但是如何使用XmlWriter包含xmlns屬性似乎正在逃避我。如何在使用XmlWriter進行XmlSerialization的同時添加命名空間?

要寫入我用下面的文檔的開始:

Writer.WriteStartDocument(); 
    Writer.WriteStartElement("urlset","http://www.sitemaps.org/schemas/sitemap/0.9"); 

用我的XmlWriter創建我通過SitemapNodes然後循環我有這樣創造了它們,並將它們寫入底層的StringBuilder通過系列化:

foreach (uk.co.andrewrea.SitemapNode node in List) 
    { 
     Serializer.Serialize(Writer, node); 
    } 

正如我所說,這工作正常,但根元素的上述命名空間不包括在內。每次我嘗試物理寫入屬性xmlns時,我都會得到xmlns被系統保留以供XML使用的異常,所以基本上我不能使用。

我知道如何做到這一點使用XmlTextWriter,也使用XmlDocument類,但我需要了解如何使用XmlWriter和通過序列化來實現這一點。

以下嘗試還會引發有關該名稱空間被保留的異常。

foreach (uk.co.andrewrea.SitemapNode node in List) 
{ 
     XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
     ns.Add("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"); 

     Serializer.Serialize(Writer, node, ns); 
} 

Exception Details: System.ArgumentException: Prefix "xmlns" is reserved for use by XML. 
+0

請勿使用標題字段之類的標題。例如「如何在使用XmlWriter進行XmlSerialization時添加命名空間?」 – cjk 2009-03-05 12:56:14

回答

4

你可以,如果你有過代碼控制的命名空間添加到XmlSerialization屬性,例如:

[XmlElement(
ElementName = "Members", 
Namespace = "http://www.cpandl.com")] 
public Employee[] Employees; 

+0

我已經包括了,但仍然是屬性不輸出。 – 2009-03-05 13:24:32