2010-04-23 8 views
7

Ho un documento XML che ho letto dal file. Il file è Unicode e ha il carattere di nuova riga '\ n'. Quando scrivo di nuovo XMLDocument, ha i caratteri di nuova riga '\ r \ n'.Scrittura di un documento XML in un file con carattere di fine riga specifico (C#)

Ecco il codice, piuttosto semplice:

XmlTextWriter writer = new XmlTextWriter(indexFile + ".tmp", System.Text.UnicodeEncoding.Unicode); 
writer.Formatting = Formatting.Indented; 

doc.WriteTo(writer); 
writer.Close(); 

XmlWriterSettings ha una proprietà, NewLineChars, ma sono in grado di specificare il parametro impostazioni 'scrittore', che è di sola lettura.

Posso creare un XmlWriter con una proprietà XmlWriterSettings specificata, ma XmlWriter non ha una proprietà di formattazione, risultando in un file senza interruzioni di riga.

Quindi, in breve, ho bisogno di scrivere un file Xml Unicode con carattere di nuova riga '\ n' e Formatting.Indented. Pensieri?

+0

vedi anche: http://stackoverflow.com/questions/3415294/how-can-i-generate-xml-with-cr-instead-of-crlf-in-xmltextwriter (che rimanda a una risposta qui) –

risposta

5

Penso che tu sia vicino. È necessario creare lo scrittore dall'oggetto impostazioni:

(Sollevato dalla pagina XmlWriterSettings MSDN)

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Indent = true; 
settings.OmitXmlDeclaration = true; 
settings.NewLineOnAttributes = true; 

writer = XmlWriter.Create(Console.Out, settings); 

writer.WriteStartElement("order"); 
writer.WriteAttributeString("orderID", "367A54"); 
writer.WriteAttributeString("date", "2001-05-03"); 
writer.WriteElementString("price", "19.95"); 
writer.WriteEndElement(); 

writer.Flush(); 
+0

Entrambe le risposte mi hanno confermato ciò che mi mancava: settings.Indent = true; – jaws

5

Usa XmlWriter.Create() per creare lo scrittore e specificare il formato. Questo ha funzionato bene:

using System; 
using System.Xml; 

class Program { 
    static void Main(string[] args) { 
     XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.NewLineChars = "\n"; 
     settings.Indent = true; 
     XmlWriter writer = XmlWriter.Create(@"c:\temp\test.xml", settings); 
     XmlDocument doc = new XmlDocument(); 
     doc.InnerXml = "<root><element>value</element></root>"; 
     doc.WriteTo(writer); 
     writer.Close(); 
    } 
}