2011-10-26 16 views
5

tôi đang cố gắng để tạo ra một tài liệu XML với nhiều không gian tên sử dụng System.Xml.Xmlwriter trong C# và đang recieving lỗi sau trên biên dịch:C# XML - Nhiều Namespace Tuyên bố với Writer XML

Tiền tố '' không thể được định nghĩa lại từ '' thành 'http://www.acme.com/BOF' trong cùng một thẻ phần tử bắt đầu.

Các toàn bộ mã của tôi là dưới đây:

 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(); 

Tôi đang làm gì sai?

Cảm ơn

John

Trả lời

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". 

Dòng thứ hai làm cho không có ý nghĩa, bởi vì bạn đang gán mặc định (không-prefix) namespace một cái gì đó khác với những gì nó là, trong cùng một vị trí như nó là.

Thay thế những hai dòng với writer.WriteStartElement("BOF", "http://www.acme.com/BOF")

3

Bạn phải vượt qua không gian tên mặc định của bạn với phương pháp WriteStartElement.

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

nên được viết như

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

Trong trường hợp đó tiền tố xsi được đăng ký tại bảng tên XML. Sử dụng sau http://www.w3.org/2001/XMLSchema-instance cho thông số ns theo phương thức XmlWriter sẽ thêm tiền tố không gian tên XML là xsi.

URI của không gian tên XML xsi cũng có sẵn tại .NET theo hằng số System.Xml.Schema.XmlSchema.InstanceNamespace.