Ho bisogno di più elementi XMLN in un elemento con XMWriter
-
21-09-2019 - |
Domanda
Sto cercando di convertire un documento XML da un formato all'altro e mentre lo faccio ho scoperto che devo inserire più dichiarazioni XMLN all'elemento radice.
Esempio:
u003C?xml version="1.0" encoding="utf-8" ?>
u003CTemplate xmlns="http://tempuri.org/TemplateBase.xsd"n xmlns:TYPES="http://tempuri.org/TemplateTypes.xsd">
alcuni contenuti
u003CTemplate>
Il motivo di tutto ciò è che ho diviso lo schema XSD in più XSD per riutilizzare i tipi generali in questo caso.
Bene, quello che voglio fare ora è scrivere questo XML con un XMLTextWriter ma non riesco a scrivere l'attributo XMLNS per i tipi.
Quello che ho provato finora è:
XmlWriter xmlWriter = XmlWriter.Create(filename, settings);
xmlWriter.WriteStartElement("Template", "http://tempuri.org/TemplateBase.xsd");
xmlWriter.WriteAttributeString("xmlns", "TYPES", "http://tempuri.org/TemplateTypes.xsd", XmlSchema.InstanceNamespace);
Quando eseguo questo codice ricevo la seguente eccezione:
System.ArgumentException: il prefisso "XMLNS" è riservato per l'uso da XML ..
Qualcuno ha qualche cura per il mio attuale mal di testa?
Soluzione
Uso
xmlWriter.WriteAttributeString("xmlns", "TYPES",
null, "http://tempuri.org/TemplateTypes.xsd");
invece di
xmlWriter.WriteAttributeString("xmlns", "TYPES",
"http://tempuri.org/TemplateTypes.xsd", XmlSchema.InstanceNamespace);
Questo dovrebbe darti l'output desiderato.
Altri suggerimenti
È molto semplice. Non scrivere il xmlns
attributi.
Invece, dovresti scrivere i tuoi attributi ed elementi nello spazio dei nomi a cui appartengono. XmlWriter
si occuperà delle dichiarazioni dello spazio dei nomi (attributi XMLNS) da solo.