مرور XML DOM عبر شجرة العقد
- الصفحة السابقة قائمة عقد DOM
- الصفحة التالية تحديد العقد في DOM
معنى كلمة “مرور” هو تدوير شجرة العقد
مرور شجرة العقد
ستحتاج دائمًا إلى تدوير مستندات XML، مثل:
هذا العمل يُدعى بـ“مرور شجرة العقد”
هذا المثال يعيد التدوير عبر جميع أطفال العنصر <book> ويظهر أسماءها وقيمها:
مثال
<!DOCTYPE html> <html> <body> <p id="demo"></p> <script> var x, i ,xmlDoc; var txt = ""; var text = "<book>" + "<title>نقاشات على مطعم ياشه</title>" + "<author>ليانغ شياو قيو</author>" + "<year>2013</year>" + "</book>"; parser = new DOMParser(); xmlDoc = parser.parseFromString(text,"text/xml"); // documentElement دائمًا يمثل العنصر الجذر x = xmlDoc.documentElement.childNodes; for (i = 0; i < x.length ;i++) { txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>"; } document.getElementById("demo").innerHTML = txt; </script> </body> </html>
توضيح الأمثلة:
- تحميل سلسلة XML إلى
xmlDoc
في - الحصول على العناصر الفرعية للعنصر الجذر
- إرجاع اسم كل عنصر فرعي وقيمة عنصر النص الموجود فيه
الاختلافات في تحليل DOM للمتصفحات
جميع المتصفحات الحديثة تدعم معيار W3C DOM.
لكن هناك بعض الاختلافات بين المتصفحات. فرقًا مهمًا هو:
طريقة معالجتهم للفراغات والسطور الجديدة
DOM - الفراغات والسطور الجديدة
عادةً يحتوي XML على مسافات أو رموز فراغ بين العناصر. عند تحرير المستند باستخدام محررات بسيطة مثل ميزة تحرير الملاحظات، يحدث هذا عادةً.
الامثلة التالية (معدة بواسطة ميزة تحرير الملاحظات) تحتوي على CR/LF (ميزة النسخة) بين كل سطر، وكل عنصر فرعي مسبوق بثلاثة مسافات:
<book> <title>نقاشات على مطعم ياشه</title> <author>ليانغ شياو قيو</author> <press>منشورات فن الأدب جيانغسو</press> <year>2013</year> <price>35</price> <ISBN>9787539962771</ISBN> </book>
Internet Explorer 9 وكل إصداراته السابقة لن تعتبر الفراغات أو السطور الجديدة كعناصر نصية، بينما سيفعل ذلك باقي الأجهزة التصفحية.
الامثلة التالية ستعطي عدد العناصر الفرعية للعنصر الجذر (books.xml). إصدارات Internet Explorer 9 وما قبلها ستقوم بإرجاع 6 عنصر فرعي، بينما إصدارات Internet Explorer 10 وما بعدها وأجهزة التصفح الأخرى ستقوم بإرجاع 9 عناصر فرعية:
مثال
function myFunction(xml) { var xmlDoc = xml.responseXML; x = xmlDoc.documentElement.childNodes; document.getElementById("demo").innerHTML = "عدد الفروع: " + x.length; }
PCDATA - بيانات الحروف المعالجة (Parsed Character Data)
عادة ما يقوم مفسر XML بمعالجة جميع النصوص الموجودة في وثيقة XML.
عند معالجة عناصر XML، سيتم أيضًا معالجة النص بين العلامات:
<message>سيتم معالجة هذا النص أيضًا</message>
سيقوم المفسر بذلك لأن عناصر XML يمكن أن تحتوي على عناصر أخرى، مثل هذا المثال، حيث يحتوي عنصر <name> على عناصر أخرى (first و last):
<name><first>Bill</first><last>Gates</last></name>
سيقوم المفسر بتفكيكها إلى العناصر التالية:
<name> <first>Bill</first> <last>Gates</last> </name>
مصطلح "PCDATA" (Parsed Character Data) يستخدم لوصف البيانات النصية التي سيتم معالجتها من قبل مفسر XML.
CDATA - بيانات الحروف غير المعالجة (Unparsed Character Data)
يشير مصطلح CDATA لوصف البيانات النصية التي لا يجب على مفسر XML معالجتها.
"<
" و "&
" وما إلى ذلك من الأحرف غير قانونية داخل عناصر XML.
"<
" سيؤدي إلى خطأ، لأن المفسر يفسرها كبداية لمكون جديد.
"&
" سيؤدي إلى خطأ، لأن المفسر يفسرها كبداية لمفردات الحروف.
بعض النصوص (مثل كود JavaScript) تحتوي على العديد من "<
" أو "&
" لتجنب الأخطاء، يمكن تعريف كود السكربت كـ CDATA.
جميع المحتويات الموجودة داخل جزء CDATA سيتم تجاهلها من قبل المفسر.
جزء CDATA باستخدام "<![CDATA[
" بداية، باستخدام "]]>
" انتهاء:
<script> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) { return 1; else { return 0; } } ]]> </script>
في المثال أعلاه، سيقوم محول الملف بتجاهل كل محتوى جزء CDATA.
ملاحظات حول جزء CDATA:
لا يجب أن يحتوي جزء CDATA على الكلمة "]]>
". لا يُسمح بالتداخل في أجزاء CDATA.
يُستخدم " لتحديد نهاية جزء CDATA]]>
" لا يجب أن يحتوي على مسافات أو خطوط تفريغ.
- الصفحة السابقة قائمة عقد DOM
- الصفحة التالية تحديد العقد في DOM