C # XML – Déclaration d’espaces de noms multiples avec XML Writer

J’essaie de créer un document XML avec plusieurs espaces de noms à l’aide de System.Xml.Xmlwriter en C # et je reçois l’erreur suivante lors de la compilation:

Le préfixe ” ne peut pas être redéfini de ” à ‘http://www.acme.com/BOF’ dans la même balise de début d’élément.

L’intégralité de mon code est ci-dessous:

XmlWriterSettings settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true }; XmlWriter writer = XmlWriter.Create("C:\\ACME\\xml.xml", settings); writer.WriteStartDocument(); writer.WriteStartElement("BOF"); writer.WriteAtsortingbuteSsortingng("xmlns", null, null, "http://www.acme.com/BOF"); //This is where I get my error writer.WriteAtsortingbuteSsortingng("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance"); writer.WriteAtsortingbuteSsortingng("fileName", null, null, "test.xml"); writer.WriteAtsortingbuteSsortingng("date", null, null, "2011-10-25"); writer.WriteAtsortingbuteSsortingng("origin", null, null, "MYORIGIN"); writer.WriteAtsortingbuteSsortingng("ref", null, null, "XX_88888"); writer.WriteEndElement(); writer.WriteStartElement("CustomerNo"); writer.WriteSsortingng("12345"); writer.WriteEndElement(); writer.WriteEndDocument(); writer.Flush(); writer.Close(); 

Qu’est-ce que je fais mal?

Merci

John

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

La deuxième ligne n’a aucun sens, car vous atsortingbuez l’espace de nom par défaut (sans préfixe) à quelque chose d’autre que ce qu’il est, au même endroit.

Remplacez ces deux lignes par writer.WriteStartElement("BOF", "http://www.acme.com/BOF")

Vous devez transmettre votre espace de noms par défaut à la méthode WriteStartElement.

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

Devrait être écrit comme

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

Dans ce cas, le préfixe xsi est enregistré dans la table de noms XML. L’utilisation ultérieure de http://www.w3.org/2001/XMLSchema-instance pour le paramètre ns à une méthode de XmlWriter le préfixe d’espace de noms XML de xsi .

L’URI de l’espace de noms XML xsi est également disponible sur .NET par la constante System.Xml.Schema.XmlSchema.InstanceNamespace .