المؤلف: AngelGavin المصدر: CSDN
كيفية تحميل المستندات ذات الأحرف الأجنبية والخاصة؟
يمكن أن تحتوي المستندات على أحرف أجنبية، مثل:
الشخصيات الأجنبية (úóí؟)
على سبيل المثال، يجب أن يسبق الأحرف الأجنبية مثل 粲 تسلسل هروب. يمكن ترميز الأحرف الأجنبية باستخدام UTF-8 أو تحديدها بتشفير مختلف، كما يلي:
الشخصيات الأجنبية (؟磲)
تم الآن تحميل XML بشكل صحيح.
يتم حجز الأحرف الأخرى في XML وتحتاج إلى التعامل معها بشكل مختلف. XML أدناه:
هذا وذاك
يحدث الخطأ التالي:
لا يسمح بأي مسافات هنا.
السطر 0000001: هذا وذاك
الموقع 0000012: ----------^
هنا & هو جزء من بنية بناء جملة XML، إذا تم وضعه داخل مصدر بيانات XML، فلا يمكن تفسيره على أنه &. تحتاج إلى استبدال تسلسلات أحرف خاصة تسمى "الكيانات".
هذا وذاك
تتطلب الأحرف التالية الكيانات المقابلة:
< <
& &
>>
" "
""
يتم استخدام حرف الاقتباس كمحدد لقيم السمات في الترميز وبالتالي لا يمكن استخدامه بشكل عام داخل قيم السمات. على سبيل المثال، سيُرجع ما يلي خطأ:
يتم استخدام علامة الاقتباس المفردة هنا كمحدد للسمة وداخل قيمة السمة نفسها. لتصحيح هذه المشكلة، يمكنك تغيير محدد السمة إلى علامات اقتباس مزدوجة:
أو يمكنك الهروب من علامات الاقتباس المفردة إلى الكيان.
ستعيد كلتا الطريقتين أعلاه قيمة السمة John's Stuff من خلال طريقة getAttribute في نموذج كائن XML. وبالمثل بالنسبة لعلامات الاقتباس المزدوجة، يمكنك استخدام الكيان ".
يمكنك أيضًا التعامل مع الأحرف الخاصة في محتوى العنصر عن طريق وضع النص في قسم CDATA. ما يلي صحيح:
في هذا المثال، يعرض نموذج كائن XML عقدة CDATA كعقدة تابعة لعقدة xml، والتي ترجع السلسلة
This & that هي مجرد محتوى "نص".
كقيمة العقدة.
كيفية استخدام مكون MSXML COM في Visual Studio 6.0 C++؟
أسهل طريقة لاستخدام مكونات MSXML COM في Visual C++ 6.0 هي استخدام التوجيه #import:
#import "msxml.dll" اسمه_guids no_namespace#import "msxml.dll" اسمه_guids no_namespace
فهو يحدد جميع واجهات IXML* ومعرفات الواجهة بحيث يمكن استخدامها في التطبيقات. تتوفر أيضًا مكتبة النوع MSXML وملفات الرأس (باللغة الإنجليزية) من INETSDK، بالإضافة إلى uuid.lib الذي يحتوي على معرفات الفئة IIDs.
كيفية استخدام كيانات HTML في XML؟
يحتوي XML التالي على كيانات HTML:
حقوق الطبع والنشر 2000، شركة مايكروسوفت، جميع الحقوق محفوظة.
وينتج الخطأ التالي:
إشارة إلى "نسخة" كيان غير محدد.
السطر: 1، الموضع: 23، رمز الخطأ: 0xC00CE002
حقوق الطبع والنشر 2000، ...
-----------------------^
وذلك لأن XML يحتوي على خمسة كيانات مضمنة فقط. لمزيد من المعلومات حول الكيانات المضمنة، راجع كيف أقوم بتحميل المستندات ذات الأحرف الأجنبية والخاصة؟ .
لاستخدام كيانات HTML، تحتاج إلى تعريفها باستخدام DTD. لمزيد من المعلومات حول DTDs، راجع توصيات W3C XML (باللغة الإنجليزية). لاستخدام DTD هذا، قم بتضمينه مباشرةً في علامة DOCTYPE، كما يلي:
حقوق الطبع والنشر 2000، شركة مايكروسوفت، جميع الحقوق محفوظة.
لتحميله، تحتاج إلى إيقاف تشغيل سمة validateOnParse لواجهة IXMLDOMDocument. حاول لصقه في صفحة اختبار أداة التحقق من الصحة، وقم بإيقاف تشغيل التحقق من صحة DTD، ثم انقر فوق التحقق من الصحة. لاحظ أنه يتم تحميل المستند وتظهر أحرف حقوق الطبع والنشر في شجرة DOM في نهاية صفحة أداة التحقق من الصحة.
إذا تم إكمال التحقق من صحة DTD، فيجب تضمين كيانات HTML التي تمثل كيانات معلمات في DTD الموجود كما يلي:
%HTMLENT;
%HTMLENT;
سيحدد كافة كيانات HTML بحيث يمكن استخدامها في مستندات XML.
كيفية التعامل مع أحرف المسافة البيضاء في محتوى العنصر؟
يحتوي XML DOM على ثلاث طرق للوصول إلى المحتوى النصي للعناصر:
سلوك السمة
عقدة القيمة إرجاع المحتوى النصي الأصلي (بما في ذلك أحرف المسافات البيضاء) على العقد TEXT وCDATA وCOMMENT وPI كما هو محدد في مصدر XML الأصلي. بالنسبة لعقد ELEMENT والمستند نفسه، يتم إرجاع القيمة null.
تقوم البيانات نفسها مثل
تكرار نص العقدة بتسلسل عقد TEXT وCDATA المتعددة في الشجرة الفرعية المحددة وإرجاع النتيجة المجمعة.
ملاحظة: تتضمن أحرف المسافات البيضاء أسطرًا وعلامات تبويب ومسافات جديدة.
تقوم الخاصيةNodeValue عادةً بإرجاع محتويات المستند الأصلي، بغض النظر عن كيفية تحميل المستند ونطاق xml:space الحالي.
تقوم سمة النص بتسلسل كل النص في الشجرة الفرعية المحددة وتوسيع الكيان. يرتبط هذا بكيفية تحميل المستند، والحالة الحالية لمفتاح keepWhiteSpace ونطاق xml:space الحالي، انظر أدناه:
keepWhiteSpace = true عند تحميل المستند
يحافظ على WhiteSpace=صحيح | يحافظ على WhiteSpace=صحيح | يحافظ على WhiteSpace=خطأ يحافظ على WhiteSpace= | false |
xml:space | =يحفظ xml:space=افتراضي | xml:space=يحافظ على | xml:space=افتراضي |
يحافظ | على يحافظ | على | يحتفظ ويقتطع |
يحافظ على WhiteSpace = خطأ عند تحميل المستند
يحافظ على WhiteSpace=صحيح | يحافظ على WhiteSpace=صحيح | يحافظ على WhiteSpace= false يحافظ على WhiteSpace= | false |
xml:space= | يحفظxml:space=افتراضي | xml:space=يحفظ | xml:space=افتراضي |
نصف يحفظ | نصف يحفظ ويقتطع | نصف يحفظ | نصف يحفظ ويقتطع |
الحفظ هنا يعني و نفس محتوى النص الأصلي تمامًا في مستند XML الأصلي، مما يعني أنه تمت إزالة المسافات البيضاء البادئة واللاحقة، ويتم الحفاظ على شبه محفوظ بمعنى "أحرف المسافات البيضاء المهمة" وتطبيع "أحرف المسافات البيضاء غير المهمة". أحرف المسافات البيضاء المهمة هي أحرف مسافات بيضاء داخل محتوى النص. أحرف المسافات البيضاء غير المهمة هي أحرف المسافات البيضاء بين الرموز المميزة، وتبدو كما يلي:
n
tجينn
tسميث n
في هذا المثال، الأحمر هو حرف مسافة بيضاء غير مهم يمكن تجاهله، بينما الأخضر هو حرف مسافة بيضاء مهم لأنه جزء من محتوى النص وبالتالي له معنى مهم لا يمكن تجاهله. لذا، في هذا المثال، تقوم خاصية النص بإرجاع ما يلي:
تظل قيمة إرجاع الحالة "nt JanentSmith n"
الاحتفاظ بـ "JanentSmith" واقتطاعها
شبه محجوزة "جين سميث"
حفظ نصف "Jane Smith" واقتطاعه
لاحظ أن "نصف الاحتفاظ" سيؤدي إلى تسوية أحرف المسافات البيضاء غير المهمة، على سبيل المثال، سيتم تقليل أحرف السطر الجديد وعلامات التبويب إلى مسافة واحدة. إذا قمت بتغيير سمة xml:space ومفتاح keepWhiteSpace، فستُرجع خصائص النص قيمًا مختلفة وفقًا لذلك.
حدود الشجرة الفرعية CDATA وxml:space="preserve".
في المثال التالي، سيتم ربط محتويات عقد CDATA أو العقد "المحجوزة" لأنها لا تشارك في تسوية أحرف المسافات البيضاء غير المهمة. على سبيل المثال:
n
t جين n
t سميث ]>n
في هذه الحالة، لم يعد يتم "دمج" أحرف المسافات البيضاء داخل عقدة CDATA مع أحرف المسافات البيضاء "غير المهمة" ولا يتم اقتطاعها. لذا فإن الحالة "نصف المحفوظة والمقطوعة" ستعيد ما يلي:
"Jane Smith"
هنا، سيتم تضمين أحرف المسافة البيضاء غير المهمة بين العلامات، بغض النظر عن محتويات عقدة CDATA. إذا قمت باستبدال CDATA بما يلي، فسيتم إرجاع نفس النتيجة:
Smith
الكيانات هي
كيانات خاصة يتم تحميلها وتحليلها كجزء من DTD ويتم عرضها ضمن عقدة DOCTYPE. ليس من الضروري أن يكون لديهم أي نطاق xml:space. على سبيل المثال:
جينن
tn
">
]>
& جين؛
بافتراض الحفاظ على WhiteSpace = false (في نطاق علامة DOCTYPE)، يتم فقدان أحرف المسافات البيضاء غير المهمة عند تحليل الكيانات. لن تحتوي الكيانات على عقد أحرف مسافة بيضاء. سوف تبدو الشجرة كما يلي:
DOCTYPE فو
الكيان: جين
العنصر : موظف
العنصر: الاسم
النص: جين
العنصر: العنوان
النص>: مهندس تصميم البرمجيات
العنصر: فو
السمة: xml:space = "المحافظة"
ENTITYREF: جين
لاحظ أن شجرة DOM المكشوفة ضمن عقدة ENTITY داخل DOCTYPE لا تحتوي على أي عقد WHITESPACE. وهذا يعني أن العقد التابعة لعقدة ENTITYREF لا تحتوي أيضًا على عقد WHITESPACE، حتى لو كان مرجع الكيان ضمن نطاق xml:space="preserve".
عادةً ما يكون لكل مثيل لـ ENTITY المشار إليه في مستند معين نفس الشجرة.
إذا كان يجب على الكيان أن يحافظ بشكل مطلق على أحرف المسافات البيضاء، فيجب عليه تحديد سمة xml:space الخاصة به داخليًا، أو يجب تعيين مفتاح تبديل الحفاظ على WhiteSpace للمستند على true.
كيفية التعامل مع أحرف المسافات البيضاء في السمات؟
هناك عدة طرق للوصول إلى قيم الخاصية. تحتوي واجهة IXMLDOMAttribute على سمة قيمة العقدة، والتي تعادل سمة قيمة العقدة والنص كملحق لـ Microsoft. تُرجع هذه الخصائص: النص الذي تُرجعه الخاصية
attrNode.nodeValue
attrNode.value
تقوم getAttribute("name") بإرجاع نفس المحتوى (والكيانات الموسعة) تمامًا كما في المستند الأصلي.
attrNode.nodeTypedValue Null
attrNode.text هو نفس NodeValue باستثناء أنه تم اقتطاع أحرف المسافات البيضاء البادئة واللاحقة.
تحدد مواصفات "لغة XML" السلوك التالي لتطبيقات XML: أنواع السمات النص الذي تم إرجاعه معرف CDATA، IDREF، IDREFS، ENTITY، ENTITIES، NOTATION، التعداد
شبه التسوية التسوية الكاملة
هنا تمثل شبه التسوية تحويل الأسطر الجديدة وأحرف الجدولة هو مساحة، ولكن المساحات المتعددة لن تتحول إلى مساحة واحدة.