উপরের বিউটিফাই পদ্ধতিটি যদি XmlDocument
ইতিমধ্যে একটি XmlProcessingInstruction
শিশু নোড ধারণ করে তার জন্য ডাকা হচ্ছে তবে নিম্নলিখিত ব্যতিক্রম নিক্ষেপ করা হবে:
এক্সএমএল ঘোষণা লিখতে পারে না। WritStartDocament পদ্ধতি ইতিমধ্যে এটি লিখে ফেলেছে।
ব্যতিক্রম থেকে মুক্তি পাওয়ার জন্য এটি আমার আসলটির পরিবর্তিত সংস্করণ:
private static string beautify(
XmlDocument doc)
{
var sb = new StringBuilder();
var settings =
new XmlWriterSettings
{
Indent = true,
IndentChars = @" ",
NewLineChars = Environment.NewLine,
NewLineHandling = NewLineHandling.Replace,
};
using (var writer = XmlWriter.Create(sb, settings))
{
if (doc.ChildNodes[0] is XmlProcessingInstruction)
{
doc.RemoveChild(doc.ChildNodes[0]);
}
doc.Save(writer);
return sb.ToString();
}
}
এটি এখন আমার জন্য কাজ করে, সম্ভবত আপনাকে XmlProcessingInstruction
কেবল প্রথমটি নয়, নোডের জন্য সমস্ত শিশু নোড স্ক্যান করতে হবে?
এপ্রিল 2015 আপডেট করুন:
যেহেতু আমার অন্য একটি এনকোডিং ছিল সেখানে ভুল ছিল, আমি কীভাবে বিওএম ছাড়াই ইউটিএফ -8 প্রয়োগ করতে পারি তা অনুসন্ধান করেছিলাম। আমি এই ব্লগ পোস্টটি খুঁজে পেয়েছি এবং এর ভিত্তিতে একটি ফাংশন তৈরি করেছি:
private static string beautify(string xml)
{
var doc = new XmlDocument();
doc.LoadXml(xml);
var settings = new XmlWriterSettings
{
Indent = true,
IndentChars = "\t",
NewLineChars = Environment.NewLine,
NewLineHandling = NewLineHandling.Replace,
Encoding = new UTF8Encoding(false)
};
using (var ms = new MemoryStream())
using (var writer = XmlWriter.Create(ms, settings))
{
doc.Save(writer);
var xmlString = Encoding.UTF8.GetString(ms.ToArray());
return xmlString;
}
}