.NET में XmlWriter का उपयोग करके XmlDocument कैसे बनाएं?




(4)

XmlWriter के पीछे विचार यह है कि जब तक आप लिखना शुरू करने से पहले अपने डेटा को संशोधित नहीं कर लेते, तब तक प्रतीक्षा करें।

XmlWriter आपकी स्थिति को ध्यान में रखकर नहीं बनाया गया था।

भी

  • तब तक प्रतीक्षा करें जब तक आपको पता न हो कि आपका डेटा लिखने से पहले क्या होने वाला है

या

  • वर्तमान में आप जो कर रहे हैं, वही करें

कई .NET फ़ंक्शन Xml को आउटपुट / जेनरेट करने के लिए XmlWriter का उपयोग करते हैं। एक फ़ाइल / स्ट्रिंग / मेमोरी के लिए आउटपुट एक बहुत ही ऑपरेशन है:

XmlWriter xw = XmlWriter.Create(PutYourStreamFileWriterEtcHere);
xw.WriteStartElement("root");
...

कभी-कभी, आपको परिणामी Xml में हेरफेर करने की आवश्यकता होती है और इसलिए इसे XmlDocument में लोड करना चाहेंगे या किसी अन्य कारण से XmlDocument की आवश्यकता हो सकती है लेकिन आपको XmlWriter का उपयोग करके XML उत्पन्न करना होगा। उदाहरण के लिए, यदि आप किसी 3rd पार्टी लाइब्रेरी में एक फ़ंक्शन कहते हैं जो केवल एक XmlWriter को आउटपुट करता है।

आपके द्वारा की जाने वाली चीजों में से एक xml को स्ट्रिंग में लिखना है और फिर इसे अपने XmlDocument में लोड करना है:

StringWriter S = new StringWriter();
XmlWriter xw = XmlWriter.Create(S);
/* write away */
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(S.ToString());

हालाँकि यह अक्षम है - पहले आप एक स्ट्रिंग में सभी xml जानकारी को क्रमबद्ध करते हैं, फिर आप DOM बनाने के लिए फिर से स्ट्रिंग को पार्स करते हैं।

आप सीधे XmlDocument बनाने के लिए XmlWriter को कैसे इंगित कर सकते हैं?


आप XMLWriter वर्ग का उपयोग करके xml फ़ाइल लिख सकते हैं। इसके लिए यहाँ उदाहरण है।

    XmlWriterSettings objSetting = new XmlWriterSettings();
    objSetting.Indent = true;
    objSetting.NewLineOnAttributes = true;

    System.Text.StringBuilder sb = new System.Text.StringBuilder();


    using (XmlWriter objWriter = XmlWriter.Create(sb, objSetting))
    {
        //Note the artificial, but useful, indenting
        objWriter.WriteStartDocument();

        objWriter.WriteStartElement("books");

        ////////Start Book Element///////

        objWriter.WriteStartElement("book");

        objWriter.WriteStartAttribute("ISBN");
        objWriter.WriteValue("asp1");
        objWriter.WriteEndAttribute();

        objWriter.WriteStartElement("Title");
        objWriter.WriteValue("ASP.NET");
        objWriter.WriteEndElement();

        objWriter.WriteElementString("ReleaseDate", "11/11/2010");

        objWriter.WriteStartElement("Pages");
        objWriter.WriteValue(200);
        objWriter.WriteEndElement(); //price

        objWriter.WriteEndElement(); //book
        ////////End Book Element///////


        ////////Another Element

        ////////Start Book Element///////

        objWriter.WriteStartElement("book");

        objWriter.WriteStartAttribute("ISBN");
        objWriter.WriteValue("c#2");
        objWriter.WriteEndAttribute();

        objWriter.WriteStartElement("Title");
        objWriter.WriteValue("C#.NET");
        objWriter.WriteEndElement();

        objWriter.WriteElementString("ReleaseDate", "10/11/2010");

        objWriter.WriteStartElement("Pages");
        objWriter.WriteValue(500);
        objWriter.WriteEndElement(); 

        objWriter.WriteEndElement(); //book
        ////////End Book Element///////



        objWriter.WriteEndElement(); //books
        objWriter.WriteEndDocument();

    }

    File.WriteAllText(Server.MapPath("BooksList.xml"), sb.ToString());

एक अंतर्निहित स्ट्रीम ऑब्जेक्ट है जिसे XmlWriter लिख रहा था, अगर वह द्विदिश (मेमोरीस्ट्रीम) था, तो आप इसे फिर से -0- स्थिति में ला सकते हैं और फिर XmlDocument.Load (स्ट्रीम) में स्ट्रीम ऑब्जेक्ट का उपयोग कर सकते हैं।

HTH,

जेड


यहाँ कम से कम एक समाधान है:

XmlDocument doc = new XmlDocument(); 
using (XmlWriter writer = doc.CreateNavigator().AppendChild()) 
{ 
    // Do this directly 
     writer.WriteStartDocument(); 
     writer.WriteStartElement("root"); 
     writer.WriteElementString("foo", "bar"); 
     writer.WriteEndElement(); 
     writer.WriteEndDocument();
    // or anything else you want to with writer, like calling functions etc.
}

जाहिरा तौर पर XpathNavigator आपको XmlWriter देता है जब आप AppendChild () कहते हैं

क्रेडिट मार्टिन ऑनन पर जाते हैं: http://groups.google.com/group/microsoft.public.dotnet.xml/browse_thread/thread/24e4c8d249ad8299?pli=1







xmlwriter