الفرق في المتصفحات XML DOM

تعامل المتصفحات المختلفة مع العقد النصي الفارغ في XML DOM مختلف.

مثال

في المثال التالي يستخدم ملف XML books.xml.

دالة loadXMLDoc()، الموجودة في JavaScript الخارجي، تستخدم لتحميل ملف XML.

عرض طول قائمة العقدات
يظهر هذا المثال طول قائمة العقدات. يختلف النتيجة في IE ومتصفحات أخرى.
تخطي العقدات النصية الفارغة بين العقدات
في هذا المثال، يتم فحص nodeType للعقدة، وتعامل العقدة فقط كعقدة عنصر.

اختلافات المتصفحات في تحليل DOM

تدعم جميع المتصفحات الحديثة معيار W3C DOM.

على الرغم من ذلك، هناك اختلافات بين المتصفحات. الفرق المهمان هما:

  • طرق تحميل XML
  • طرق معالجة الفراغات والسيناريوهات المنسقة

في “تحليل XML DOMفي هذا الفصل، تم شرح طرق تحميل XML المختلفة.

في هذا الفصل، سنشرح طرق معالجة الفراغات والسيناريوهات المنسقة بشكل مختلف.

DOM - الفراغات والسيناريوهات المنسقة

يحتوي XML عادةً على مسافات أو رموز فراغ بين العقدات. هذا هو السيناريو الشائع عند استخدام محرر بسيط (مثل ملف الملاحظات).

في المثال التالي (معدل من قبل ملف الملاحظات) يحتوي على CR/LF بين كل سطر، ويحتوي على مسافاتين قبل كل عقدة فرعية:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

Firefox، وأخرى بعض المتصفحات، ستعالج الفراغات الفارغة أو السيناريوهات المنسقة كنقاط نصية، بينما لن يفعل ذلك Internet Explorer.

يظهر المقطع التالي عدد العقدات الفرعية التي يمتلكها العنصر الجذر (من books.xml):

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.documentElement.childNodes;
document.write("عدد عقدات الأبناء: " + x.length);

مثال توضيحي:

  • من خلال استخدام loadXMLDoc() ضع "books.xml"تحميل xmlDoc"
  • الحصول على عقدات الأبناء للعنصر الجذر
  • إخراج عدد العقدات الفرعية

النتيجة تعتمد على المتصفح المستخدم. Firefox يخرج 9، بينما IE يخرج 4.

TIY

تخطي العقدات النصية الفارغة بين العقدات

للإهمال العقدات النصية الفارغة بين عقدات العناصر، يجب التحقق من نوع العقدة. نوع العقدة للعنصر هو 1:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.documentElement.childNodes;
for (i=0;i<x.length;i++)
{ 
if (x[i].nodeType==1)
  {// معالجة فقط عقدات العناصر 
  document.write(x[i].nodeName);
  document.write("<br />");
  } 
}

مثال توضيحي:

  • من خلال استخدام loadXMLDoc() ضع "books.xml"تحميل xmlDoc"
  • الحصول على عقدات الأبناء للعنصر الجذر
  • تحقق من نوع كل عقدة فرعية. إذا كان نوع العقدة هو "1"، فهي عقدة عنصر

TIY (بسيط) أو TIY (كامل)