سؤال

أنا بناء XmlDocument على الطاير في .صافي مع مستند xml.ثم تحويل ذلك مع تحويل() طريقة من XslCompiledTransform.

تحويل() طريقة رمى استثناء لأن حرف غير صالح من أجل ترميز وجد في تيار.عندما نسخ/لصق السلسلة مع مساعدة من TextVisualizer في Visual Studio في Altova XmlSpy, ، لا تجد الترميز المشكلة.

حاولت إضافة UTF-16 رأس الوثيقة أن تجعل تجعل UTF-16 و الدعوة تحويل من النص الناتج أدى إلى ذلك يشكو BOM.أدناه هو نسخة مبسطة من قانون اعتدت.

            XmlDocument document = new XmlDocument();
            XmlDeclaration decl = document.CreateXmlDeclaration("1.0", "UTF-16", null);
            document.AppendChild(decl);

            XmlNode root = document.CreateNode(XmlNodeType.Element, "RootNode", "");
            XmlNode nodeOne = document.CreateNode(XmlNodeType.Element, "FirstChild", null);
            XmlNode nodeTwp = doc.CreateNode(XmlNodeType.Element, "Second Child", null);

            root.AppendChild(nodeOne);
            root.AppendChild(nodeTwo);
            document.AppendChild(root);

وأنا وبالتالي أكتب إلى سلسلة مثل ذلك:

        StringBuilder sbXml = new StringBuilder();
        using (XmlWriter wtr = XmlWriter.Create(sbXml))
        {
            xml.WriteTo(wtr);
            // More code that calls sbXml.ToString());
        }

ماذا يجب أن أفعل لإضافة بوم أو الحصول على XslCompiledTransform.تحويل لا يهتمون bom ؟

هل كانت مفيدة؟

المحلول

أنت لا تحتاج إلى يدويا إضافة إعلان xml.

هذا الكود سيتم إضافة بوم وإعلان إلى الإخراج.

XmlDocument document = new XmlDocument(); 
// XmlDeclaration decl = document.CreateXmlDeclaration("1.0", "UTF-16", null); 
// document.AppendChild(decl); 
XmlNode root = document.CreateNode(XmlNodeType.Element, "RootNode", ""); 
XmlNode nodeOne = document.CreateNode(XmlNodeType.Element, "FirstChild", null);
XmlNode nodeTwo = document.CreateNode(XmlNodeType.Element, "SecondChild", null); 
root.AppendChild(nodeOne); 
root.AppendChild(nodeTwo); 
document.AppendChild(root);

using(MemoryStream ms = new MemoryStream())
{
    StreamWriter sw = new StreamWriter(ms, Encoding.Unicode);
    document.Save(sw);
    Console.Write(System.Text.Encoding.Unicode.GetString(ms.ToArray()));
}

إذا كنت في حاجة إلى الإخراج byte [] ، يمكنك استخدام الناتج من مايكروسوفت.ToArray().خلاف ذلك يمكنك استخدام نظام ملائم.النص.ترميز ترميز ترجمة byte[] في مجموعة متنوعة من ترميزات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top