2010-10-21 33 views
9

Comment écrire un fichier XML à partir d'un System.Xml.XmlReader?Comment créer un fichier XML à partir d'un XmlReader?

Je pensais que ce serait une question simple mais chaque fois que je cherche, il semble que je finisse par lire le fichier à un lecteur ou à écrire un nœud par nœud. L'objet XmlReader achemine le fichier XML stocké dans une base de données et doit juste sortir de la base de données vers un fichier. Y a-t-il un moyen facile de faire cela?

 SqlCommand dataCmd = new SqlCommand(sqlText, Conn); 
     System.Xml.XmlReader dataReader = null; 

     dataCmd.CommandTimeout = 60000; 

     Conn.Open(); 
     dataReader = dataCmd.ExecuteXmlReader(); 
     dataReader.Read(); 

Répondre

24

Vous devez créer un XmlWriter et appeler sa WriteNode method.

Par exemple:

using (conn) 
using (SqlCommand dataCmd = new SqlCommand(sqlText, Conn)) { 
    dataCmd.CommandTimeout = 60000; 

    Conn.Open(); 
    using (XmlReader dataReader = dataCmd.ExecuteXmlReader()) 
    using (XmlWriter writer = XmlWriter.Create(File.OpenWrite(...)) { 
     writer.WriteNode(dataReader, true); 
    } 
} 
+1

+1 pour le nettoyage en général l'exemple de code. –

+0

J'en ai utilisé un plus haut, mais ce nettoyage a rendu le code encore meilleur. Je vous remercie. – Andy

+2

Pour les googleurs. Le fichier ne se ferme pas si vous n'utilisez pas var settings = new XmlWriterSettings {CloseOutput = true}; XmlWriter.Create (Fichier.OuvreEcriture (...), paramètres) – Archlight

8

La façon la plus simple serait de le transmettre dans un XmlWriter, en utilisant une méthode telle que celle-ci:

public void WriteOutXml(XmlReader xmlReader, string fileName) 
{ 
    var writer = XmlWriter.Create(fileName); 
    writer.WriteNode(xmlReader, true); 
}