2009-02-26 10 views
5

क्या .net में xml स्ट्रिंग लेने और इसे पढ़ने में आसान बनाने का कोई तरीका है?एक्सएमएल को और अधिक पठनीय बनाने के लिए

<element1><element2>some data</element2></element1> 
इस के लिए

:

<element1> 
    <element2> 
     some data 
    </element2> 
</element1> 

वहाँ किसी भी इस के लिए कक्षा में बनाया है क्या मेरा मतलब मैं इस परिवर्तित कर सकते हैं क्या है? चूंकि एसक्यूएल सर्वर 2005 अंतरिक्ष या कुछ चीज़ों को बचाने के लिए एक्सएमएल पर सभी स्वरूपण को हटाने लगता है ...

उत्तर

16

आप .NET 3.5 का उपयोग कर रहे हैं, तो आप एक XDocument और उसके बाद के रूप में यह लोड कर सकते हैं बस ToString() को कॉल करें जो इसे उचित रूप से इंडेंट करेगा।

using System; 
using System.Xml.Linq; 

public class Test 
{ 
    static void Main() 
    { 
     string xml = "<element1><element2>some data</element2></element1>"; 

     XDocument doc = XDocument.Parse(xml); 
     xml = doc.ToString(); 
     Console.WriteLine(xml); 
    } 
} 

परिणाम: उदाहरण के लिए:

<element1> 
    <element2>some data</element2> 
</element1> 

आप किसी फ़ाइल या अन्य स्ट्रीम पर लिख रहे हैं, तो XDocument.Save (डिफ़ॉल्ट रूप से) यह भी इंडेंट होगा।

(मेरा मानना ​​है कि XElement सभी एक ही सुविधाओं की है, यदि आप वास्तव में एक XDocument जरूरत नहीं है।)

+0

पर ToString() पर कॉल करें मेरे पास यह ऐप मेरी \ bin निर्देशिका में है, इसे एक्सएमएल सुंदर प्रिंट के लिए "xmlpp" कहा जाता है। अमूल्य। – Cheeso

5

आप XML को वापस फ़ाइल में कैसे सहेजते/लिखते हैं?

आप एक XmlWriter बना सकते हैं और यह एक XmlWriterSettings उदाहरण है, जहां आप सही करने के लिए इंडेंट गुण सेट पारित कर सकते हैं:

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

XmlWriter writer = XmlWriter.Create (outputStream, settings); 
+0

मैं सिर्फ एक messagebox में यह दिखाने के इतना सब मुझे मिल गया एक स्ट्रिंग .. – Peter

+1

@Petoj है - ठीक; इसे स्ट्रिंगवाइटर पर लिखें, फिर स्ट्रिंगवाइटर –

1

आप स्ट्रिंग को XDocument ऑब्जेक्ट में लोड कर सकते हैं और इसे एक स्ट्रिंग में फिर से सहेज सकते हैं:

XDocument doc = XDocument.Load(new StringReader(xmlString)); 
StringWriter writer = new StringWriter(); 
doc.Save(writer); 
string readable = writer.ToString(); 

कि आप XML इस तरह से स्वरूपित दे देंगे:

सभी की
<?xml version="1.0" encoding="utf-16"?> 
<element1> 
    <element2>some data</element2> 
</element1> 
0

पहले, आपने टैग किया है C# और VB.NET दोनों। तो मेरा जवाब दोनों के लिए होगा।

आप फ़ंक्शन को परिभाषित कर सकते हैं जो स्ट्रिंग के प्रकार में पैरामीटर के रूप में XML स्ट्रिंग प्राप्त करता है।

मान लें;

Dim myXML As String = "<element1><element2>some data</element2></element1>" 
Dim myPrettyXML As String 
myPrettyXML = PrettyXML(myPrettyXML) 

[C#]

Private String PrettyXML(string XMLString) 
    { 
     StringWriter sw = new StringWriter(); 
     XMLTextWriter xw = new XmlTextWriter(sw); 
     xw.Formatiing = Formatting.Indented; 
     xw.Indentation = 4; 
     XmlDocument doc = new XmlDocument(); 
     doc.Save(xm); 
     return sw.ToString(); 
    } 

: तो फिर आप इस समारोह के रूप में फोन simpyl कर सकते हैं

[वीबी]

Private Function PrettyXML(XMLString As String) As String  
     Dim sw As New StringWriter() 
     Dim xw As New XMLWriter(sw) 
     xw.Formatiing = Formatting.Indented 
     xw.Indentation = 4 

     Dim doc As New XMLDocument 
     doc.LoadXML(XMLString) 
     doc.Save(xw) 
     Return sw.ToString()  
End Function 

:

आप के रूप में एक समारोह बनाया फिर आप बस टी कॉल कर सकते हैं उनके कार्य के रूप में:

string myXML = "<element1><element2>some data</element2></element1>"; 
string myPrettyXML = ""; 
myPrettyXML = PrettyXML(myPrettyXML); 

नोट: मैंने सी # संस्करण की कोशिश नहीं की है, लेकिन इसे काम करना चाहिए।

आशा इस मदद करता है ..

पल मुझे नहीं यह एक फ़ाइल पर लिखने में अच्छी तरह से
+0

एफवाईआई, आपको 'new XmlTextReader()' या 'new XmlTextWriter()' का उपयोग नहीं करना चाहिए। उन्हें .NET 2.0 के बाद से हटा दिया गया है। 'XmlReader.Create()' या 'XmlWriter.Create()' का उपयोग करें। –

+0

इसके अलावा, यह चार साल पहले से कुछ अन्य उत्तरों की तुलना में बेहतर कैसे है? –

+1

@ जॉन सैंडर्स में यह एक बात है कि अन्य उत्तरों प्रदान नहीं करते हैं, आप निर्दिष्ट कर सकते हैं कि कितने रिक्त स्थान इंडेंट हैं, मैं इसे इस समय के बाद उत्तर के रूप में चिह्नित नहीं करूंगा लेकिन इसकी एक +1 है! – Peter

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