2009-11-18 17 views
12

Come rimuovere la DB da un file XML che si sta creando?Come posso rimuovere la BOM da XmlTextWriter usando C#?

Ho provato a utilizzare il nuovo metodo UTF8Encoding (false), ma non funziona. Ecco il codice che ho:

XmlDocument xmlDoc = new XmlDocument(); 
XmlTextWriter xmlWriter = new XmlTextWriter(filename, new UTF8Encoding(false)); 
xmlWriter.Formatting = Formatting.Indented; 
xmlWriter.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); 
xmlWriter.WriteStartElement("items"); 
xmlWriter.Close(); 
xmlDoc.Load(filename); 
XmlNode root = xmlDoc.DocumentElement; 
XmlElement item = xmlDoc.CreateElement("item"); 
root.AppendChild(item); 
XmlElement itemCategory = xmlDoc.CreateElement("category"); 
XmlText itemCategoryText = xmlDoc.CreateTextNode("test"); 
item.AppendChild(itemCategory); 
itemCategory.AppendChild(itemCategoryText); 
xmlDoc.Save(filename); 
+0

FYI, non si dovrebbe usare 'new XmlTextReader()' o 'nuova XmlTextWriter()'. Sono stati deprecati da .NET 2.0. Usa invece 'XmlReader.Create()' o 'XmlWriter.Create()'. –

risposta

29

Stai salvando il file due volte, una volta con XmlTextWriter e una volta con xmlDoc.Save. Salvataggio da XmlTextWriternon è aggiunta di una BOM - risparmio con xmlDoc.Save è.

Basta salvare ad un TextWriter, invece, in modo da poter specificare nuovamente la codifica:

using (TextWriter writer = new StreamWriter(filename, false, 
              new UTF8Encoding(false)) 
{ 
    xmlDoc.Save(writer); 
} 
+0

Ciao Jon, grazie per la rapida risposta, quindi stai dicendo di rimuovere la sezione XmlTextWriter all'inizio e utilizzare solo il TextWriter alla fine del metodo? – Chris

+0

Beh, non è chiaro che cosa si intende fare il tuo codice. Perché stai attualmente salvando il file e poi ricaricandolo? –

+0

Sto solo cercando di creare un file XML con una serie di nodi diversi al suo interno. Ad essere onesti ero di fretta e ho tirato la sezione da un altro sito e l'ho cambiata dove appropriato. – Chris

0

che avrei scritto il codice XML in una stringa (costruttore) al posto e quindi scrivere quella stringa in un file.

+0

Questo approccio è più lento del necessario e consuma memoria extra se il tuo set di dati XML è abbastanza grande, poiché stai aggiungendo un passaggio intermedio non necessario. È preferibile scrivere direttamente sul file usando Xml [Text] Writer come indicato dal altre risposte – user169771

Problemi correlati