2010-01-09 15 views
5

मुझे उचित इंडेंटेशन (Formatting.Indented) के साथ फ़ाइल करने के लिए एक XmlDocument को सहेजने की आवश्यकता है, लेकिन उनके बच्चों के साथ कुछ नोड्स (Formatting.None) में एक पंक्ति में होना चाहिए।एकाधिक इंडेंटेशन सेटिंग्स के साथ XmlDocument को कैसे सहेजना है?

XmlTextWriter से पूरे दस्तावेज़ के लिए सेटिंग स्वीकार करने के बाद से इसे कैसे प्राप्त किया जाए? @Ahmad Mageed के resposne के बाद


संपादित करें:

मुझे लगता है कि XmlTextWriter सेटिंग्स पता नहीं था लेखन के दौरान संशोधित किया जा सकता। ये अच्छी खबर है।

अभी मैं XmlDocument बचत कर रहा हूँ (जो पहले से ही नोड्स से भर जाता है, यह .xaml पेज है विशिष्ट होना) इस तरह:

XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8); 
writer.Formatting = Formatting.Indented; 
xmlDocument.WriteTo(writer); 
writer.Flush(); 
writer.Close(); 

यह खरोज सभी नोड्स में, निश्चित रूप से सक्षम बनाता है। सभी <Run> नोड्स से निपटने के दौरान मुझे इंडेंटेशन अक्षम करने की आवश्यकता है।

आपके उदाहरण में आप XmlTextWriter "मैन्युअल रूप से" लिखते हैं। क्या सभी xmlDocument नोड्स के माध्यम से क्रॉल करने का एक आसान तरीका है और उन्हें XmlTextWriter पर लिखना है ताकि मैं <Run> नोड्स का पता लगा सकूं? या क्या मुझे कुछ प्रकार की रिकर्सिव विधि लिखनी है जो वर्तमान नोड के हर बच्चे के पास जाएगी?

+0

@shg: मैं आपके जवाब को देखा। LINQ से XML एक विकल्प है? या कड़ाई से .NET 2.0? बीटीडब्लू आपको अपने प्रश्न को संपादित करना चाहिए और इसे उस कोड को उत्तर के रूप में पोस्ट करने के बजाय यहां पोस्ट करना चाहिए ताकि अन्य लोगों के लिए यह देखने के लिए सबकुछ एक ही स्थान पर हो क्योंकि यह आपके प्रश्न के लिए अतिरिक्त जानकारी है। आप इसे संपादित कर सकते हैं और फिर दूसरी पोस्ट हटा सकते हैं। –

+0

@ अहमद मैगेड: मैंने पहले कभी LINQ का उपयोग XML से नहीं किया है, लेकिन यह एक विकल्प है। संकेत के लिए धन्यवाद। मैं इसके करीब नजर रखूंगा। बीटीडब्ल्यू मैंने आपके द्वारा सुझाए गए संपादन को बनाया है। मैं स्टैक ओवरफ्लो पर प्रश्न पोस्ट करने के लिए नया हूं, इसलिए गड़बड़ी के लिए खेद है। – shg

उत्तर

3

आपका क्या मतलब है "चूंकि XmlTextWriter पूरे दस्तावेज़ के लिए सेटिंग स्वीकार करते हैं?" XmlTextWriter की सेटिंग्स को संशोधित किया जा सकता है, XmlWriter के एक बार सेट के विपरीत। इसी तरह, आप XmlDocument का उपयोग कैसे कर रहे हैं? कृपया कुछ कोड पोस्ट करने के लिए जो आपने कोशिश की है, ताकि दूसरों को इस मुद्दे की बेहतर समझ हो।

यदि मैं सही ढंग से समझ गया, तो आप एक पंक्ति पर दिखाई देने वाले नोड्स को प्रभावित करने के लिए XmlTextWriter के स्वरूपण को संशोधित कर सकते हैं। एक बार पूरा हो जाने के बाद आप फ़ॉर्मेटिंग को इंडेंट करने के लिए रीसेट कर देंगे।

उदाहरण के लिए, कुछ इस तरह:

XmlTextWriter writer = new XmlTextWriter(...); 
writer.Formatting = Formatting.Indented; 
writer.Indentation = 1; 
writer.IndentChar = '\t'; 

writer.WriteStartElement("root"); 

// people is some collection for the sake of an example 
for (int index = 0; index < people.Count; index++) 
{ 
    writer.WriteStartElement("Person"); 

    // some node condition to turn off formatting 
    if (index == 1 || index == 3) 
    { 
     writer.Formatting = Formatting.None; 
    } 

    // write out the node and its elements etc. 
    writer.WriteAttributeString("...", people[index].SomeProperty); 
    writer.WriteElementString("FirstName", people[index].FirstName); 

    writer.WriteEndElement(); 

    // reset formatting to indented 
    writer.Formatting = Formatting.Indented; 
} 

writer.WriteEndElement(); 
writer.Flush(); 

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

  • कोई संबंधित समस्या नहीं^_^