2009-12-08 37 views
6

XElement örneğim var ve XmlWriter sınıfını kullanarak bir akışa yazmak istiyorum. Niye ya? Peki, yapılandırma ayarlarından biri ikili Xml kullanılıp kullanılmayacağını belirler. Bu ayara bağlı olarak uygun bir XmlWriter örneği oluşturulur - XmlWriter.Create(stream) veya XmlDictionaryWriter.CreateBinaryWriter(stream)).Bir akışa XmlWriter kullanarak System.Xml.Linq.XElement nasıl yazılır

Neyse, aşağıdaki kodu çalışıyorum ama boş akışı bırakır:

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

, xmlReader düzgün kök XML öğesi de MoveToContent sonra hizalanır.

Yanlış bir şey yapmalıyım, ama ne?

Teşekkürler.

cevap

10

GetXmlWriter'in ne yaptığını göstermediniz ... ancak yazarı temizlemeyi denediniz mi? Alternatif

xmlWriter.Flush(); 

, başka using açıklamada XmlWriter sarın: bu özel durumda ben özellikle gerek inanmıyorum rağmen

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(); 
} 

Sen yanı XmlReader için aynı şeyi isteyebilirsiniz için.

Tüm bunları söyledikten sonra, neden bir XmlReader kullanıyorsunuzdan emin değilim. Herhangi bir sebeple alakalı XElement'u bulamıyor ve XElement.WriteTo(XmlWriter) kullanıyor musunuz? Veya tüm belgeyi kopyalamaya çalışıyorsanız, yalnızca XDocument.WriteTo(XmlWriter)

+0

kullanın. Yazarı yıkamamıştım. Teşekkürler. – mark

+0

BTW, Yorum için teşekkürler, uygulamamı buna göre değiştireceğim. – mark

İlgili konular