2009-12-08 12 views
6

Tengo una instancia XElement y deseo escribir en una secuencia usando la clase XmlWriter. ¿Por qué? Bueno, uno de los ajustes de configuración define si se debe usar Xml binario o no. Según esta configuración, se crea una instancia XmlWriter adecuada, ya sea por XmlWriter.Create(stream) o XmlDictionaryWriter.CreateBinaryWriter(stream)).Cómo escribir System.Xml.Linq.XElement utilizando XmlWriter en una secuencia

De todos modos, estoy tratando el siguiente código, pero deja la corriente de vacío:

using (var stream = new MemoryStream()) 
{ 
    var xmlReader = new XDocument(xml).CreateReader(); 
    xmlReader.MoveToContent(); 
    var xmlWriter = GetXmlWriter(stream); 
    xmlWriter.WriteNode(xmlReader, true); 
    return stream.ToArray(); 
} 

He comprobado, xmlReader está correctamente alineado después MoveToContent en el elemento XML raíz.

Debo estar haciendo algo mal, pero ¿qué?

Gracias.

Respuesta

10

No ha mostrado lo que hace GetXmlWriter ... pero ha intentado simplemente enrojecer al escritor?

xmlWriter.Flush(); 

Alternativamente, envolver el XmlWriterusing en otro comunicado:

using (var stream = new MemoryStream()) 
{ 
    var xmlReader = new XDocument(xml).CreateReader(); 
    xmlReader.MoveToContent(); 
    using (var xmlWriter = GetXmlWriter(stream)) 
    { 
     xmlWriter.WriteNode(xmlReader, true); 
    } 
    return stream.ToArray(); 
} 

Es posible que desee hacer lo mismo para el XmlReader también, aunque en este caso particular no creo que sobre todo necesita a.

Habiendo dicho todo esto, no estoy del todo seguro de por qué está utilizando un XmlReader en absoluto. ¿Alguna razón por la que no puede encontrar el XElement relevante y usar XElement.WriteTo(XmlWriter)? O si está tratando de copiar el documento completo, solo use XDocument.WriteTo(XmlWriter)

+0

Eso es todo. No limpié al escritor. Gracias. – mark

+0

BTW, gracias por el comentario, voy a cambiar mi implementación en consecuencia. – mark

Cuestiones relacionadas