2010-07-14 12 views
7

का उपयोग कर Xmldocument बनाना मेरे पास निम्न कोड है जो doc.Load() के दौरान 'रूट एलिमेंट मिसिंग' थूक रहा है।रूट एलिमेंट गुम - XmlTextWriter

MemoryStream stream = new MemoryStream(); 
XmlTextWriter xmlWriter = new XmlTextWriter(stream, Encoding.UTF8); 
xmlWriter.Formatting = System.Xml.Formatting.Indented; 
xmlWriter.WriteStartDocument(); 
xmlWriter.WriteStartElement("Root"); 
XmlDocument doc = new XmlDocument(); 
stream.Position = 0; 
doc.Load(stream); 
xmlWriter.Close(); 

मैं इस मुद्दे को समझने में सक्षम नहीं हूं। कोई अंतर्दृष्टि?

+2

(कुछ असंबंधित: हालांकि यह सख्ती से जरूरी नहीं है, आप अपने 'मेमोरीस्ट्रीम' और' एक्सएमएलटीक्स्टवाइटर 'ऑब्जेक्ट्स के लिए' उपयोग 'ब्लॉक में कोड को लपेट सकते हैं - वे दोनों 'IDISposable' हैं।) – stakx

उत्तर

13

आपने xmlWriter को फ़्लश नहीं किया है, इसलिए यह अभी तक कुछ भी नहीं लिखा हो सकता है। इसके अलावा, आप कभी नहीं मूल तत्व को पूरा कर रहे हैं, तो

<Root> 

यह बंद टैग लिखा है नहीं होगा लिखा तो भी यह है। आप इसे पूर्ण दस्तावेज़ के रूप में लोड करने का प्रयास कर रहे हैं।

मुझे यकीन नहीं है कि XmlWriter वास्तव में किसी तत्व के प्रारंभिक भाग को लिखता है - भूलें कि इसमें भी लिखने के गुण हो सकते हैं। आपके द्वारा प्राप्त कोड के साथ सबसे अधिक लिख सकता है <Root है।

यहाँ एक पूरा कार्यक्रम है, जो काम करता है: (। ध्यान दें कि मैं बुला नहीं कर रहा हूँ WriteEndDocument - कि केवल यदि आप अभी भी खुला तत्वों या गुण आवश्यक प्रतीत हो रहा है)

using System; 
using System.IO; 
using System.Text; 
using System.Xml; 

class Test 
{ 
    static void Main(string[] args) 
    { 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      XmlTextWriter xmlWriter = new XmlTextWriter(stream, Encoding.UTF8); 
      xmlWriter.Formatting = System.Xml.Formatting.Indented; 
      xmlWriter.WriteStartDocument(); 
      xmlWriter.WriteStartElement("Root"); 
      xmlWriter.WriteEndElement(); 
      xmlWriter.Flush(); 

      XmlDocument doc = new XmlDocument(); 
      stream.Position = 0; 
      doc.Load(stream); 
      doc.Save(Console.Out); 
     } 
    } 
} 

+0

आदेश का बिंदु: है।() (आमतौर पर) फ्लैश() से अधिक सही नहीं है? – annakata

+0

@annalata: मुझे लगता है कि स्ट्रीम बंद कर देगा, जिसे हम यहां नहीं करना चाहते हैं। आमतौर पर मैं सिर्फ लेखक का निपटान करता हूं। –

0

क्या @ स्कीट कहा, प्लस, आप अपने तत्व बंद करने के लिए नहीं है:

xmlWriter.WriteEndElement(); 
+0

मैंने अपनी दूसरी वाक्य में कवर किया :) –

+0

वास्तव में आपने किया, लेकिन * चुपके मोड * में - यही कारण है कि मैं समझ सकता हूं कि मैं इसे क्यों याद करूँगा। :) – Robaticus

0

खैर मैं आप दस्तावेज़ शुरू करने, लेकिन मैं आपको ending यह या 012 नहीं दिख रहा है देखनायह ... (कम से कम इसका उपयोग करने से पहले नहीं)

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