2009-12-08 13 views
6

पर लिखने के लिए कैसे करें मेरे पास XElement उदाहरण है और मैं XmlWriter कक्षा का उपयोग कर स्ट्रीम में लिखना चाहता हूं। क्यूं कर? खैर, विन्यास सेटिंग्स में से एक परिभाषित करता है कि बाइनरी एक्सएमएल का उपयोग करना है या नहीं। इस सेटिंग के आधार पर एक उपयुक्त XmlWriter उदाहरण बनाया गया है - या तो XmlWriter.Create(stream) या XmlDictionaryWriter.CreateBinaryWriter(stream)) द्वारा।XmlWriter का उपयोग करते हुए System.Xml.Linq.XElement को एक स्ट्रीम

वैसे भी, मैं निम्नलिखित कोड कोशिश कर रहा हूँ, लेकिन यह धारा खाली हो जाती है:

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 ठीक से MoveToContent जड़ XML तत्व पर बाद गठबंधन है।

मुझे कुछ गलत करना होगा, लेकिन क्या?

धन्यवाद।

उत्तर

10

आपने यह नहीं दिखाया है कि GetXmlWriter क्या करता है ... लेकिन क्या आपने अभी लेखक को फ़्लश करने का प्रयास किया है?

xmlWriter.Flush(); 

वैकल्पिक रूप से, एक और using बयान में XmlWriter लपेट:

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

आप हालांकि इस विशेष मामले में मैं आप विशेष रूप से की जरूरत है पर विश्वास नहीं है, साथ ही XmlReader के लिए भी ऐसा ही करना चाह सकते हैं सेवा मेरे।

यह सब कहकर, मुझे पूरा यकीन नहीं है कि आप XmlReader का उपयोग क्यों कर रहे हैं। किसी भी कारण से आप प्रासंगिक XElement नहीं ढूंढ सकते हैं और XElement.WriteTo(XmlWriter) का उपयोग कर सकते हैं? या यदि आप पूरे दस्तावेज़ की प्रतिलिपि बनाने का प्रयास कर रहे हैं, तो बस XDocument.WriteTo(XmlWriter)

+0

का उपयोग करें। मैंने लेखक को फ्लश नहीं किया। धन्यवाद। – mark

+0

बीटीडब्ल्यू, टिप्पणी के लिए धन्यवाद, मैं तदनुसार अपना कार्यान्वयन बदल दूंगा। – mark

संबंधित मुद्दे