2015-04-27 1 views
0

Могу ли я использовать XmlWriter для записи в файла файла и строки?XmlWriter как для строки, так и для файла

При записи в файл я делаю это:

using (var xw = XmlWriter.Create("myFile.xml")) 
      { 
        //Build the xml 
      } 

И при записи строки я делаю это:

using (var sw = new StringWriter()) 
      { 
       using (var xw = XmlWriter.Create(sw)) 
       { 
        // Build the xml 
       } 
       return sw.ToString(); 
      } 

Но я могу написать как к файлу и строку с тот же экземпляр XmlWriter?

+2

Почему бы не написать строку, а затем записать эту строку в файл, если необходимо? –

ответ

1

Вы можете создать метод, как это:

private static void WriteXML(TextWriter writer) 
{ 
    using (var xw = XmlWriter.Create(writer)) 
    { 
     // Build the xml 
    } 
} 

А потом называют это нравится:

using (StreamWriter sw = new StreamWriter(...)) 
    WriteXML(sw); 

написать файл или

string xml = String.Empty; 
using (StringWriter sw = new StringWriter()) 
{ 
    WriteXML(sw); 
    xml = sw.ToString(); 
} 

Чтобы создать строку.

Можно даже создать вспомогательные методы:

private static void WriteXMLFile(string fileName) 
{ 
    using (StreamWriter sw = new StreamWriter(...)) 
     WriteXML(sw); 
} 

private static string GetXML() 
{ 
    using (StringWriter sw = new StringWriter()) 
    { 
     WriteXML(sw); 
     return sw.ToString(); 
    } 
} 
0

Создать compositeXmlWriter который оборачивает много XmlWriter экземпляров.

public class CompositeXmlWriter : XmlWriter 
{ 
    private readonly IEnumerable<XmlWriter> writers; 
    public CompositeXmlWriter(IEnumerable<XmlWriter> writers) 
    { 
     this.writers = writers; 
    } 

    public override void WriteStartDocument() 
    { 
     foreach (var writer in writers) 
     { 
      writer.WriteStartDocument(); 
     } 
    } 

    public override void WriteEndDocument() 
    { 
     foreach (var writer in writers) 
     { 
      writer.WriteEndDocument(); 
     } 
    } 

    ...Implement all other methods 
} 

Создать свой CompositeXmlWriter с другими XmlWriters.

using (var xw = new CompositeXmlWriter(new[] { XmlWriter.Create("myFile.xml"), XmlWriter.Create(new StringWriter())}) 
{ 
    //Build the xml 
} 

Теперь все, что написано в xw будут записаны во всех XmlWriters.

Смежные вопросы