2011-11-23 11 views
14

मेरे पास यह कोड है, जो किसी ऑब्जेक्ट को फ़ाइल में क्रमबद्ध करता है। मैं प्रत्येक एक्सएमएल विशेषता को अलग लाइन पर आउटपुट करने की कोशिश कर रहा हूं। कोड इस तरह दिखता है:मैं XmlTextWriter में सेटिंग प्रॉपर्टी कैसे सेट करूं, ताकि मैं प्रत्येक एक्सएमएल विशेषता को अपनी लाइन पर लिख सकूं?

public static void ToXMLFile(Object obj, string filePath) 
{ 
    XmlSerializer serializer = new XmlSerializer(obj.GetType()); 

    XmlWriterSettings settings = new XmlWriterSettings(); 
    settings.NewLineOnAttributes = true; 

    XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8); 
    writer.Settings = settings; // Fails here. Property is read only. 

    using (Stream baseStream = writer.BaseStream) 
    { 
     serializer.Serialize(writer, obj); 
    } 
} 

केवल समस्या है, XmlTextWriter वस्तु की Settings संपत्ति है केवल पढ़ने के लिए।

ऑब्जेक्ट पर Settings संपत्ति को मैं कैसे सेट करूं, ताकि NewLineOnAttributes सेटिंग काम करेगी?


ठीक है, मैंने सोचा कि मैं एक XmlTextWriter की जरूरत है, के बाद से XmlWriter एक abstract वर्ग है। अगर आप मुझसे पूछें तो किंडा भ्रमित है। अंतिम काम कर कोड यहाँ है:

/// <summary> 
/// Serializes an object to an XML file; writes each XML attribute to a new line. 
/// </summary> 
public static void ToXMLFile(Object obj, string filePath) 
{ 
    XmlSerializer serializer = new XmlSerializer(obj.GetType()); 

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

    using (XmlWriter writer = XmlWriter.Create(filePath, settings)) 
    { 
     serializer.Serialize(writer, obj); 
    } 
} 

उत्तर

18

XmlWriter के स्थिर Create() विधि का उपयोग करें।

XmlWriter.Create(filePath, settings); 

ध्यान दें कि आप सेटिंग में NewLineOnAttributes संपत्ति सेट कर सकते हैं।

+0

यह दृष्टांत नहीं किया। यह कहता है कि इसे निष्पादित किया गया, लेकिन बनाई गई वस्तु शून्य है। नोट: मैंने 'XmlTextWriter लेखक = XmlWriter.Create (filePath, सेटिंग्स) XmlTextWriter के रूप में उपयोग किया; ' –

+0

@RobertHarvey - इसका अर्थ है कि' XmlWriter.Create (...) '' XmlTextWriter' नहीं बनाता है। जब आप आउटपुट देखते हैं, तो आप पाएंगे कि यह 'XmlWellFormedWriter' लौटाता है। हालांकि यह 'XmlWriter' की तरह व्यवहार करना बुद्धिमान होगा। – Polity

+0

तो मैं इसे 'XmlTextWriter' पर कैसे प्राप्त करूं? –

3

मुझे पता है कि सवाल पुराना है, वैसे भी XMLTextWriter के लिए इंडेंटेशन सेट करना वास्तव में संभव है। XMLwriter के विपरीत, आपको सेटिंग्स से गुजरना नहीं है; आप Formatting संपत्ति का उपयोग करना चाहिए:

XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8); 
w.Formatting = Formatting.Indented; 

देखें https://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.formatting(v=vs.110).aspx

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

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