यदि उपरोक्त सुशोभित विधि को XmlDocument
उस के लिए बुलाया जा रहा है जिसमें पहले से ही एक XmlProcessingInstruction
बच्चा नोड है तो निम्नलिखित अपवाद फेंका गया है:
XML घोषणा नहीं लिख सकते। WriteStartDocument विधि ने इसे पहले ही लिखा है।
यह अपवाद से छुटकारा पाने के लिए मूल एक का मेरा संशोधित संस्करण है:
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 को अपडेट करें:
चूँकि मेरे पास एक और मामला था जहाँ एन्कोडिंग गलत थी, इसलिए मैंने बिना बॉम के UTF-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;
}
}