दिलचस्प पोस्ट
जावा में पाइप (|) ऑपरेटर जावा में ऑब्जेक्ट का आकार की गणना करें रेल 4 में चिंताओं का उपयोग कैसे करें एएसपी.नेट एमवीसी में फ़ेविकॉन.को सेवा Google App Engine में एक प्रकार के लिए सभी डेटा हटाएं इकाई फ़्रेमवर्क के साथ SQL के लिए Linq में दिनांक समय प्रकार में समय के बिना केवल तिथि की तुलना कैसे करें? सीएसएस में प्रमुख बिंदु बनाएं मैं JavaScript में इसके वैल्यू के आधार पर एक <select> में एक <option> कैसे अक्षम कर सकता हूं? "इस" को हटाने के बाद "यह" मान का उपयोग क्यों नहीं करना चाहिए? एंड्रॉइड: डेटपिकर डिवाइडर का रंग कैसे बदल सकता है? सी, सी 99, एएनएसआई सी और जीएनयू सी के बीच अंतर क्या है? मैं क्रोम में एक HTTP पोस्ट कैसे डीबग कर सकता हूं? WPF सूची देखें निष्क्रिय चयन रंग एक LinearLayout के लिए एक प्रतिशत की चौड़ाई निर्धारित करना? पीडीओ का उपयोग करते हुए मैं कैसे नल मूल्यों को सम्मिलित कर सकता हूं?

प्रारूप एक्सएमएल स्ट्रिंग को फ्रेंडली एक्सएमएल स्ट्रिंग प्रिंट करें

मेरे पास एक्सएमएल स्ट्रिंग है जैसे:

<?xml version='1.0'?><response><error code='1'> Success</error></response> 

वहाँ एक तत्व और दूसरे के बीच कोई रेखा नहीं है, और इस तरह पढ़ने के लिए बहुत मुश्किल है। मैं एक ऐसा कार्य चाहता हूं जो उपरोक्त स्ट्रिंग को स्वरूपित करता है:

 <?xml version='1.0'?> <response> <error code='1'> Success</error> </response> 

मैन्युअल रूप से फ़ॉर्मेट फ़ंक्शन खुद लिखने का सहारा लेने के बिना, क्या कोई भी नेट लाइब्रेरी या कोड स्निपेट है जिसका मैं उपयोग कर सकता हूं?

वेब के समाधान से एकत्रित समाधान "प्रारूप एक्सएमएल स्ट्रिंग को फ्रेंडली एक्सएमएल स्ट्रिंग प्रिंट करें"

XmlTextWriter का उपयोग करें …

 public static String PrintXML(String XML) { String Result = ""; MemoryStream mStream = new MemoryStream(); XmlTextWriter writer = new XmlTextWriter(mStream, Encoding.Unicode); XmlDocument document = new XmlDocument(); try { // Load the XmlDocument with the XML. document.LoadXml(XML); writer.Formatting = Formatting.Indented; // Write the XML into a formatting XmlTextWriter document.WriteContentTo(writer); writer.Flush(); mStream.Flush(); // Have to rewind the MemoryStream in order to read // its contents. mStream.Position = 0; // Read MemoryStream contents into a StreamReader. StreamReader sReader = new StreamReader(mStream); // Extract the text from the StreamReader. String FormattedXML = sReader.ReadToEnd(); Result = FormattedXML; } catch (XmlException) { } mStream.Close(); writer.Close(); return Result; } 

आपको किसी भी तरह सामग्री को पार्स करना होगा … मैं यह करने के लिए LINQ का सबसे आसान तरीका उपयोग कर रहा हूं। फिर, यह सब आपके सटीक परिदृश्य पर निर्भर करता है। यहां एक इनपुट एक्सएमएल स्ट्रिंग को प्रारूपित करने के लिए LINQ का उपयोग करने वाला एक उदाहरण है।

 string FormatXml(string xml) { try { XDocument doc = XDocument.Parse(xml); return doc.ToString(); } catch (Exception) { return xml; } } 

[संक्षेप के लिए बयानों का उपयोग करना]

क्रिस्टोफरजॉन्सन से यह एक अच्छा ढेर है:

  1. इसके लिए किसी XML दस्तावेज़ हेडर की आवश्यकता नहीं होती है
  2. स्पष्ट अपवाद हैं
  3. अतिरिक्त व्यवहार विकल्प जोड़ता है: OmitXmlDeclaration = true, NewLineOnAttributes = true
  4. कोड की कम लाइनें

     static string PrettyXml(string xml) { var stringBuilder = new StringBuilder(); var element = XElement.Parse(xml); var settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; settings.Indent = true; settings.NewLineOnAttributes = true; using (var xmlWriter = XmlWriter.Create(stringBuilder, settings)) { element.Save(xmlWriter); } return stringBuilder.ToString(); } 

निम्न लिंक की जांच करें: सुंदर प्रिंट एक्सएमएल (दुर्भाग्य से कैसे, लिंक अब 404 :() देता है

लिंक में विधि एक XML स्ट्रिंग को तर्क के रूप में लेता है और एक अच्छी तरह से बनाई गई (इंडेंट) XML स्ट्रिंग देता है।

मैं सिर्फ इस जवाब को अधिक व्यापक और सुविधाजनक बनाने के लिए लिंक से नमूना कोड की प्रतिलिपि बनाई है।

 public static String PrettyPrint(String XML) { String Result = ""; MemoryStream MS = new MemoryStream(); XmlTextWriter W = new XmlTextWriter(MS, Encoding.Unicode); XmlDocument D = new XmlDocument(); try { // Load the XmlDocument with the XML. D.LoadXml(XML); W.Formatting = Formatting.Indented; // Write the XML into a formatting XmlTextWriter D.WriteContentTo(W); W.Flush(); MS.Flush(); // Have to rewind the MemoryStream in order to read // its contents. MS.Position = 0; // Read MemoryStream contents into a StreamReader. StreamReader SR = new StreamReader(MS); // Extract the text from the StreamReader. String FormattedXML = SR.ReadToEnd(); Result = FormattedXML; } catch (XmlException) { } MS.Close(); W.Close(); return Result; } 

सरल समाधान जो मेरे लिए काम कर रहा है:

  XmlDocument xmlDoc = new XmlDocument(); StringWriter sw = new StringWriter(); xmlDoc.LoadXml(rawStringXML); xmlDoc.Save(sw); String formattedXml = sw.ToString(); 

.NET 2.0 नाम का समाधान करने का समाधान करना, और उचित संसाधन-निपटान, इंडेंटेशन, संरक्षित-सफेद स्थान और कस्टम एन्कोडिंग के साथ :

 public static string Beautify(System.Xml.XmlDocument doc) { string strRetValue = null; System.Text.Encoding enc = System.Text.Encoding.UTF8; // enc = new System.Text.UTF8Encoding(false); System.Xml.XmlWriterSettings xmlWriterSettings = new System.Xml.XmlWriterSettings(); xmlWriterSettings.Encoding = enc; xmlWriterSettings.Indent = true; xmlWriterSettings.IndentChars = " "; xmlWriterSettings.NewLineChars = "\r\n"; xmlWriterSettings.NewLineHandling = System.Xml.NewLineHandling.Replace; //xmlWriterSettings.OmitXmlDeclaration = true; xmlWriterSettings.ConformanceLevel = System.Xml.ConformanceLevel.Document; using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { using (System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(ms, xmlWriterSettings)) { doc.Save(writer); writer.Flush(); ms.Flush(); writer.Close(); } // End Using writer ms.Position = 0; using (System.IO.StreamReader sr = new System.IO.StreamReader(ms, enc)) { // Extract the text from the StreamReader. strRetValue = sr.ReadToEnd(); sr.Close(); } // End Using sr ms.Close(); } // End Using ms /* System.Text.StringBuilder sb = new System.Text.StringBuilder(); // Always yields UTF-16, no matter the set encoding using (System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(sb, settings)) { doc.Save(writer); writer.Close(); } // End Using writer strRetValue = sb.ToString(); sb.Length = 0; sb = null; */ xmlWriterSettings = null; return strRetValue; } // End Function Beautify 

उपयोग:

 System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.XmlResolver = null; xmlDoc.PreserveWhitespace = true; xmlDoc.Load("C:\Test.svg"); string SVG = Beautify(xmlDoc); 

मैंने कोशिश की :

 internal static void IndentedNewWSDLString(string filePath) { var xml = File.ReadAllText(filePath); XDocument doc = XDocument.Parse(xml); File.WriteAllText(filePath, doc.ToString()); } 

अपेक्षित के रूप में यह ठीक काम कर रहा है

अगर आप XMLDoc को लोड करते हैं तो मुझे पूरा यकीन है कि .ओस्ट्रिंग () फ़ंक्शन इस के लिए एक अधिभार रखती है।

लेकिन क्या यह डीबगिंग के लिए है? इसका कारण यह भेजा जाता है कि कम जगह लेनी है (यानी एक्सएमएल से अनावश्यक सफेद पट्टी छीनने)

यूटीएफ -8 एक्सएमएल घोषणा के साथ अनुकूलनीय सुंदर XML आउटपुट

निम्नलिखित क्लास परिभाषा में एक इनपुट एक्सएमएल स्ट्रिंग को फॉर्मेटेड आउटपुट एक्सएमएल को एक्सएमएल डीपीएरेशन के रूप में यूटीएफ -8 के रूप में कनवर्ट करने के लिए एक आसान तरीका है। यह XmlWriterSettings वर्ग की पेशकश के सभी विन्यास विकल्पों का समर्थन करता है।

 using System; using System.Text; using System.Xml; using System.IO; namespace CJBS.Demo { /// <summary> /// Supports formatting for XML in a format that is easily human-readable. /// </summary> public static class PrettyXmlFormatter { /// <summary> /// Generates formatted UTF-8 XML for the content in the <paramref name="doc"/> /// </summary> /// <param name="doc">XmlDocument for which content will be returned as a formatted string</param> /// <returns>Formatted (indented) XML string</returns> public static string GetPrettyXml(XmlDocument doc) { // Configure how XML is to be formatted XmlWriterSettings settings = new XmlWriterSettings { Indent = true , IndentChars = " " , NewLineChars = System.Environment.NewLine , NewLineHandling = NewLineHandling.Replace //,NewLineOnAttributes = true //,OmitXmlDeclaration = false }; // Use wrapper class that supports UTF-8 encoding StringWriterWithEncoding sw = new StringWriterWithEncoding(Encoding.UTF8); // Output formatted XML to StringWriter using (XmlWriter writer = XmlWriter.Create(sw, settings)) { doc.Save(writer); } // Get formatted text from writer return sw.ToString(); } /// <summary> /// Wrapper class around <see cref="StringWriter"/> that supports encoding. /// Attribution: http://stackoverflow.com/a/427737/3063884 /// </summary> private sealed class StringWriterWithEncoding : StringWriter { private readonly Encoding encoding; /// <summary> /// Creates a new <see cref="PrettyXmlFormatter"/> with the specified encoding /// </summary> /// <param name="encoding"></param> public StringWriterWithEncoding(Encoding encoding) { this.encoding = encoding; } /// <summary> /// Encoding to use when dealing with text /// </summary> public override Encoding Encoding { get { return encoding; } } } } } 

आगे सुधार के लिए संभावनाएं: –

  • एक अतिरिक्त विधि GetPrettyXml(XmlDocument doc, XmlWriterSettings settings) बनाया जा सकता है जो कॉलर को आउटपुट को कस्टमाइज़ करने की अनुमति देता है।
  • एक अतिरिक्त विधि GetPrettyXml(String rawXml) जोड़ा जा सकता है जो ग्राहक को XmlDocument का उपयोग करने के बजाय कच्चे पाठ को पार्स करने में सहायता करता है। मेरे मामले में, मुझे XmlDocument का उपयोग करते हुए XML को हेरफेर करने की आवश्यकता थी, इसलिए मैंने इसे जोड़ नहीं लिया।

उपयोग:

 String myFormattedXml = null; XmlDocument doc = new XmlDocument(); try { doc.LoadXml(myRawXmlString); myFormattedXml = PrettyXmlFormatter.GetPrettyXml(doc); } catch(XmlException ex) { // Failed to parse XML -- use original XML as formatted XML myFormattedXml = myRawXmlString; }