سؤال

عند تحميل XML إلى XmlDocument ، أي

XmlDocument document = new XmlDocument();
document.LoadXml(xmlData);

هل هناك أي طريقة لوقف هذه العملية من استبدال الكيانات ؟ لدي مشكلة غريبة حيث لدي TM الرمز (المخزنة ككيان #8482) في xml يتم تحويلها إلى TM حرف.بقدر ما أنا قلق من هذا يجب أن لا يحدث كما مستند XML يحتوي الترميز ISO-8859-1 (التي لا تملك الرمز TM)

شكرا

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

المحلول

هذا هو معيار سوء فهم أدوات XML.الأعمال كلها مع "&#x" هو النحوية ميزة مصممة للتعامل مع حرف ترميزات.الخاص بك XmlDocument ليس تيار من الشخصيات - وقد تحررت من ترميز الأحرف القضايا بدلا من ذلك فإنه يحتوي على نموذج مجردة من نوع XML البيانات.الكلمات هذه تشمل دوم و InfoSet لست متأكدا بالضبط دقيقة.

إن "&#x" gubbins لا وجود لها في هذا النموذج لأن المسألة برمتها غير ذي صلة ، فإنه سيعود - عند الاقتضاء - عند تحويل معلومات تعيين مرة أخرى إلى تيار حرف في بعض الترميز.

سوء الفهم هذا بما فيه الكفاية مشتركة جعلت في المؤلفات الأكاديمية كجزء من مجموعة مماثلة من المراوغات.نلقي نظرة على "Xml الحمى" في هذا الموقع: http://doi.acm.org/10.1145/1364782.1364795

نصائح أخرى

ماذا تكتب ؟ أ TextWriter?التيار ؟ ماذا ؟

التالية تحافظ على كيان (حسنا ، فإنه يستبدل مع عرافة ما يعادلها) - ولكن إذا كنت تفعل الشيء نفسه مع StringWriter يكشف unicode و يستخدم هذا بدلا من ذلك:

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(@"<xml>&#8482;</xml>");
    using (MemoryStream ms = new MemoryStream())
    {
        XmlWriterSettings settings = new  XmlWriterSettings();
        settings.Encoding = Encoding.GetEncoding("ISO-8859-1");
        XmlWriter xw = XmlWriter.Create(ms, settings);
        doc.Save(xw);
        xw.Close();
        Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
    }

النواتج:

    <?xml version="1.0" encoding="iso-8859-1"?><xml>&#x2122;</xml>

أعترف الأمور مربكة قليلا مع مستندات XML و ترميزات ، ولكن أتمنى أن تحصل على مجموعة مناسبة عند حفظه مرة أخرى, إذا كنت لا تزال تستخدم ISO-8859-1 - ولكن إذا كان يمكنك حفظ مع UTF-8, لن تحتاج إلى.في بعض الطرق ، منطقيا الوثيقة حقا يحتوي على الرمز بدلا من كيان المرجعية - وهذا الأخير هو مجرد ترميز المسألة.(أنا أفكر بصوت عال هنا - من فضلك لا تأخذ هذا معلومات موثوقة.)

ماذا تفعل مع الوثيقة بعد التحميل ؟

وأعتقد إذا كنت أرفق الكيان المحتويات في CDATA القسم ينبغي أن تترك وحدها على سبيل المثال

<root>
<testnode>
<![CDATA[some text &#8482;]]>
</testnode>
</root>

الكيان المراجع ليست ترميز معينة.وفقا W3C XML 1.0 التوصية:

إذا كان الحرف إشارة يبدأ مع "&#x", الأرقام و الحروف حتى على إنهاء ;توفر الست عشري تمثيل حرف رمز نقطة في ISO/IEC 10646.

إن &#xxxx ؛ الكيانات تعتبر الشخصية التي يمثلونها.كل XML يتم تحويلها إلى unicode على قراءة أي من هذه الكيانات إزالتها لصالح حرف unicode التي يمثلونها.وهذا يشمل أي التكرار لهم في unicode المصدر مثل السلسلة التي تم تمريرها إلى LoadXML.

وبالمثل على كتابة أي حرف لا يمكن أن تكون ممثلة من قبل تيار كتب إلى تحويل &#xxxx ؛ الكيان.هناك نقطة صغيرة في محاولة للحفاظ عليها.

وهناك خطأ شائع هو تتوقع الحصول على سلسلة من دوم من قبل بعض الوسائل التي تستخدم الترميز الأخرى ثم unicode.هذا لا يحدث بغض النظر عن ما

شكرا لجميع من مساعدة.

لقد ثابت مشكلتي عن طريق كتابة HtmlEncode وظيفة التي تحل محل الواقع جميع الشخصيات قبل أن يبصق بها إلى صفحة ويب (بدلا من الاعتماد على ما كسر HtmlEncode() .صافي وظيفة التي يبدو فقط إلى ترميز مجموعة فرعية صغيرة من الشخصيات لزم الأمر)

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