2011-10-26 14 views
5

Próbuję utworzyć dokument XML z wielu nazw korzystających System.Xml.Xmlwriter w C# i jestem recieving następujący błąd podczas kompilacji:C# XML - Multiple deklaracja przestrzeni nazw z XML Writer

przedrostek '' Nie można zmienić definicji z "" na "http://www.acme.com/BOF" w obrębie tego samego tagu elementu początkowego.

Całość mojego kodu jest poniżej:

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

Co robię źle?

Dzięki

John

Odpowiedz

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

Druga linia nie ma sensu, ponieważ jesteś przypisywania domyślnego (bez prefiksu) nazw do czegoś innego niż to, co jest w tym samym miejscu, jak to jest, że.

zastąpić te dwie linie z writer.WriteStartElement("BOF", "http://www.acme.com/BOF")

3

Należy zdać domyślnej przestrzeni nazw do sposobu WriteStartElement.

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

powinno być napisane jak

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

w tym przypadku przedrostek xsi jest zarejestrowany na nazwisko XML tabeli. Później użycie parametru http://www.w3.org/2001/XMLSchema-instance dla parametru ns przy użyciu metody XmlWriter spowoduje dodanie przedrostka przestrzeni nazw XML o numerze xsi.

Identyfikator URI przestrzeni nazw XML xsi jest również dostępny w .NET przez stałą System.Xml.Schema.XmlSchema.InstanceNamespace.

Powiązane problemy