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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top