ইউটিএফ -8 এক্সএমএল ঘোষণার সাথে কাস্টমাইজেবল প্রেটি এক্সএমএল আউটপুট
নিম্নলিখিত শ্রেণীর সংজ্ঞাটি একটি ইনপুট এক্সএমএল স্ট্রিংটিকে ইউটিএফ -8 হিসাবে এক্সএমএল ঘোষণার সাথে ফর্ম্যাট আউটপুট এক্সএমএলে রূপান্তর করতে একটি সহজ পদ্ধতি দেয়। এটি সমস্ত কনফিগারেশন বিকল্পগুলিকে সমর্থন করে যা এক্সএমএল রাইটারসেটেটিং ক্লাস অফার করে।
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)
এক্সটেল পদ্ধতিটি যুক্ত করা যেতে পারে যা ক্লায়েন্টকে এক্সএমএল ডকুমেন্ট ব্যবহার না করে কাঁচা পাঠ্যকে পার্সিং সমর্থন করে। আমার ক্ষেত্রে, এক্সএমএল ডকুমেন্টটি ব্যবহার করে আমার এক্সএমএলকে চালিত করা দরকার, তাই আমি এটি যুক্ত করি নি।
ব্যবহার:
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;
}