الإشارة إلى استثناء الكيان غير المعلن أثناء العمل مع XML
سؤال
أحاول ضبط innerxml من XMLDOC ولكن الحصول على الاستثناء: الإشارة إلى الكيان غير المعلن
XmlDocument xmldoc = new XmlDocument();
string text = "Hello, I am text α – —"
xmldoc.InnerXml = "<p>" + text + "</p>";
هذا يلقي الاستثناء:
الإشارة إلى الكيان غير المعلن "ألفا". السطر 2 ، الموقف 2 ..
كيف يمكنني حل هذه المشكلة؟
المحلول
XML ، على عكس HTML لا تحدد الكيانات (أي الإشارات المسماة إلى أحرف Unicode) لذلك لا يتم ترجمة α - وما إلى ذلك إلى طابعها المقابل. يجب عليك استخدام القيمة العددية بدلاً من ذلك. يمكنك فقط استخدام <و & in xml
إذا كنت ترغب في إنشاء HTML ، فاستخدم htmldocument بدلاً من ذلك.
نصائح أخرى
في .NET ، يمكنك استخدام System.Xml.XmlConvert
صف دراسي:
string text = XmlConvert.EncodeName("Hello α");
بدلاً من ذلك ، يمكنك إعلان الكيانات محليًا عن طريق وضع التصريحات بين قوسين مربعة في إعلان Doctype. أضف الرأس التالي إلى XML الخاص بك:
<!DOCTYPE documentElement[
<!ENTITY Alpha "Α">
<!ENTITY ndash "–">
<!ENTITY mdash "—">
]>
قم بعمل Google على "كيانات شخصية HTML" لتعريفات الكيان.
حاول استبدال و alpha
Α
الجواب السابق صحيح. بديل آخر هو ربط مستند HTML الخاص بك بـ DTD حيث يتم تعريف كيانات الأحرف هذه ، وهذا هو تعريف XHTML DTD القياسي. يجب أن يتضمن ملف XML الخاص بك الإعلان التالي:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
يمكنك أيضًا تعيين النص الداخلي إلى "Hello, I am text α – —"
, وجعل XMLDOCINGUES الهروب منها تلقائيا. أظن.
لم يكن استخدام htmldocument مناسبًا في وضعي ، وكان نظامنا XMlurlResolver مخصص والذي استخدمناه لتحميل XML.
//setup
public class CustomXmlResolver : XmlUrlResolver { /* ... */ }
String originalXml; //fetched xml with html entities in it
var doc = new XmlDocument();
doc.XmlResolver = new AdCastXmlResolver();
//making use of a transitional dtd
doc.LoadXml("<!DOCTYPE html SYSTEM \"xhtml1-transitional.dtd\" > " + originalXml);
استخدم string system.net.webutility.htmldecode (سلسلة) والتي ستقوم بفك تشفير جميع الأحرف المشفرة لكيان HTML إلى متغير Unicode الخاص به. وهي متوفرة من Dot.NET Framework 4
إذا كنت ترغب في استخدام أسماء كيانات HTML التي اعتدت عليها ، فقد قمت بتغطية W3C وأنتجت "تعريفات كيان XML للشخصيات" http://www.w3.org/tr/xml-entity-names/, ، والتي هي أساسا قائمة من الكيانات المسماة تشبه إلى حد بعيد تلك التي لديها HTML. ولكن كما ذكر أعلاه ، فإن هذا غير مدمج في XML ، ويجب دعمه صراحة من خلال تطبيقات XML التي تريد استخدام هذه الكيانات المسماة.