2011-10-26 72 views
5

我試圖創建在C#中使用System.Xml.Xmlwriter多個名稱空間的XML文檔和我recieving上編譯以下錯誤:C#XML - 與XML作家多個命名空間聲明

前綴「」不能在同一起始元素標籤內從「'重新定義爲」http://www.acme.com/BOF「。

我的代碼全部低於:

 XmlWriterSettings settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true }; 

     XmlWriter writer = XmlWriter.Create("C:\\ACME\\xml.xml", settings); 

     writer.WriteStartDocument(); 

     writer.WriteStartElement("BOF"); 
     writer.WriteAttributeString("xmlns", null, null, "http://www.acme.com/BOF"); //This is where I get my error 
     writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance"); 
     writer.WriteAttributeString("fileName", null, null, "test.xml"); 
     writer.WriteAttributeString("date", null, null, "2011-10-25"); 
     writer.WriteAttributeString("origin", null, null, "MYORIGIN"); 
     writer.WriteAttributeString("ref", null, null, "XX_88888"); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("CustomerNo"); 
     writer.WriteString("12345"); 
     writer.WriteEndElement(); 

     writer.WriteEndDocument(); 

     writer.Flush(); 
     writer.Close(); 

我在做什麼錯?

感謝

約翰

回答

7
writer.WriteStartElement("BOF"); // write element name BOF, no prefix, namespace "" 
writer.WriteAttributeString("xmlns", null, null, "http://www.acme.com/BOF"); //Set namespace for no prefix to "http://www.acme.com/BOF". 

第二行是沒有意義的,因爲你分配默認的(無前綴)命名空間比它是什麼以外的東西,在同一個地方,因爲它是。

writer.WriteStartElement("BOF", "http://www.acme.com/BOF")

3

你應該通過你的默認命名空間的WriteStartElement方法。

0
writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance"); 

應該寫成

writer.WriteAttributeString("xsi", "http://www.w3.org/2000/xmlns/", "http://www.w3.org/2001/XMLSchema-instance"); 

前綴xsi在XML名稱表中登記這種情況下,替換這兩行。稍後使用http://www.w3.org/2001/XMLSchema-instance作爲參數ns,方法爲XmlWriter將預先添加xsi的XML名稱空間前綴。

XML名稱空間xsi的URI也可以在.NET中通過常量System.Xml.Schema.XmlSchema.InstanceNamespace獲得。