2009-05-29 81 views
6

這種飼料(它SNIPPIT)需要看起來就像這樣:如何添加XML命名空間

<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:noNamespaceSchemaLocation="amzn-envelope.xsd"> 

我該怎麼添加到這個C#代碼添加額外的xmlns,XSI垃圾:

writer.WriteStartDocument(); 
writer.WriteStartElement("AmazonEnvelope"); 

這個消息被拒絕沒有它 -

+1

你沒有提到你使用的編程語言。一個假定C#是因爲WriteStartDocument是XmlWriter上的一個方法,但這不是保證。 – Randolpho 2009-05-29 21:01:27

+0

它說在XML片段下面的行中間的「C#」..... – 2009-05-29 21:11:22

回答

5

是.NET 3.5的一個選項嗎?

XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance"; 

string s = new XElement("AmazonEnvelope", 
    new XAttribute(XNamespace.Xmlns + "xsi", ns), 
    new XAttribute(ns + "noNamespaceSchemaLocation", "amzn-envelope.xsd") 
).ToString(); 

XmlWriter

const string ns = "http://www.w3.org/2001/XMLSchema-instance"; 
writer.WriteStartDocument(); 
writer.WriteStartElement("AmazonEnvelope"); 
writer.WriteAttributeString("xmlns", "xsi", "", ns); 
writer.WriteAttributeString("xsi", "noNamespaceSchemaLocation", 
     ns, "mzn-envelope.xsd"); 
writer.WriteEndDocument(); 
+0

很多基於XmlWriter的代碼,所以目前沒有一個選項... – 2009-05-29 21:32:34

8

試試這個:

writer.WriteStartElement("AmazonEnvelope"); 
writer.WriteAttributeString(
    "xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance"); 
writer.WriteAttributeString(
    "xsi", "noNamespaceSchemaLocation", null, "amzn-envelope.xsd"); 
... 
writer.WriteEndElement();