2008-09-30 7 views
1

Nous avons un projet VXML qu'un tiers analyse pour nous fournir un système de navigation par téléphone. Nous leur demandons d'entrer un code d'identification pour laisser un message, qui est ensuite examiné par notre société.Question sur XMLTextWriters and Streams

Nous avons actuellement ce travail comme suit:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Stream m = new MemoryStream(); //Create Memory Stream - Used to create XML document in Memory 
XmlTextWriter XML_Writer = new XmlTextWriter(m, System.Text.Encoding.UTF8); 
XML_Writer.Formatting = Formatting.Indented; 
XML_Writer.WriteStartDocument(); 
/* snip - writing a valid XML document */ 
XML_Writer.WriteEndDocument(); 
XML_Writer.Flush(); 
m.Position = 0; 
byte[] b = new byte[m.Length]; 
m.Read(b, 0, (int)m.Length); 
XML_Writer.Close(); 
HttpContext.Current.Response.Write(System.Text.Encoding.UTF8.GetString(b, 0, b.Length)); 

Je suis juste le maintien de cette application, je n'ai pas écrit ... mais la partie terminale me semble alambiquée.

Je sais qu'il prend le flux de sortie et qu'il y introduit le XML écrit ... mais pourquoi lit-il en premier la chaîne entière? N'est-ce pas inefficace?

Existe-t-il un meilleur moyen d'écrire le code ci-dessus?

Répondre

1

Oui, il suffit d'écrire directement à la réponse Output (IO.StreamWriter) ou OutputStream (IO.Stream):

XmlTextWriter XML_Writer = new XmlTextWriter(HttpContext.Current.Response.OutputStream, HttpContext.Current.Response.Encoding); 
//... 
XML_Writer.Flush(); 
0

Après que je peux appeler XML_Writer.Flush(), non? Cela va vider le XML dans le flux?

+0

Oui cela devrait le faire –

0

Vous pouvez écrire directement au flux de réponse:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

XmlWriter XML_Writer = XmlWriter.Create(HttpContext.Current.Response.Output);

Pour ajouter des paramètres à l'écrivain que vous feriez mieux d'utiliser la nouvelle classe XmlWriterSettings. Donnez-le en tant que paramètre à la fonction XmlWriter.Create.

+0

Cela ne fonctionne qu'avec la classe XmlWriter, pas le XmlTextWriter que j'utilise ... que perdrais-je en changeant? – Jeff

+0

XmlTextWriter hérite de la classe XmlWriter. En principe, le véhicule de sortie (texte/flux, etc.) est découplé de la partie d'écriture. XmlWriter.Create a été introduit dans .NET 2.0 et est le "moyen préféré" de faire des écrivains XML. Voir la section remarques dans le doc msdn de XmlWriter.Create. – Boaz