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
.