الإشارة إلى استثناء الكيان غير المعلن أثناء العمل مع XML

StackOverflow https://stackoverflow.com/questions/281682

  •  07-07-2019
  •  | 
  •  

سؤال

أحاول ضبط 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 &alpha;");

بدلاً من ذلك ، يمكنك إعلان الكيانات محليًا عن طريق وضع التصريحات بين قوسين مربعة في إعلان Doctype. أضف الرأس التالي إلى XML الخاص بك:

<!DOCTYPE documentElement[
<!ENTITY Alpha "&#913;">
<!ENTITY ndash "&#8211;">
<!ENTITY mdash "&#8212;">
]>

قم بعمل Google على "كيانات شخصية HTML" لتعريفات الكيان.

حاول استبدال و alpha

  &#913;

الجواب السابق صحيح. بديل آخر هو ربط مستند 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 التي تريد استخدام هذه الكيانات المسماة.

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