XML DOM - تصفح العقد
يمكن التنقل بين العقد باستخدام علاقات العقد.
التنقل في عُقد DOM
غالبًا ما يسمى الوصول إلى العقد في شجرة العقد عبر العلاقة بين العقد "عقد التنقل".
في XML DOM ، يتم تعريف علاقات العقد على أنها خصائص للعقد:
- عقدة الأم
- ChildNodes
- أولا
- الطفل الأخير
- التالي
- الشقيق السابق
توضح الصورة التالية جزءًا من شجرة العقدة والعلاقة بين العقد في books.xml :
DOM - العقدة الأصل
تحتوي جميع العقد على عقدة أصلية واحدة بالضبط. ينتقل الكود التالي إلى العقدة الأصلية لـ <book>:
مثال
function myFunction(xml) {
var xmlDoc = xml.responseXML;
var x = xmlDoc.getElementsByTagName("book")[0];
document.getElementById("demo").innerHTML = x.parentNode.nodeName;
}
شرح المثال:
- تحميل " books.xml " في xmlDoc
- احصل على أول عنصر <book>
- إخراج اسم العقدة للعقدة الأصل لـ "x"
تجنب العقد النصية الفارغة
سوف يتعامل Firefox وبعض المتصفحات الأخرى مع المسافات البيضاء الفارغة أو الأسطر الجديدة كعقد نصية ، بينما لن يقوم Internet Explorer بذلك.
يتسبب هذا في مشكلة عند استخدام الخصائص: firstChild ، lastChild ، nextSibling ، previousSibling.
لتجنب التنقل إلى عقد نصية فارغة (مسافات وأحرف سطر جديد بين عقد العناصر) ، نستخدم وظيفة تتحقق من نوع العقدة:
function get_nextSibling(n)
{
var y = n.nextSibling;
while (y.nodeType! = 1)
{
y = y.nextSibling;
}
return y;
}
تسمح لك الوظيفة أعلاه باستخدام get_nextSibling ( عقدة ) بدلاً من عقدة الخاصية .nextSibling.
وأوضح الكود:
عقد العنصر هي من النوع 1. إذا لم تكن العقدة الشقيقة عقدة عنصر ، فإنها تنتقل إلى العقد التالية حتى يتم العثور على عقدة عنصر. بهذه الطريقة ، ستكون النتيجة هي نفسها في كل من Internet Explorer و Firefox.
احصل على العنصر الطفل الأول
يعرض الكود التالي العقدة الأولى للعنصر <book> الأول:
مثال
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xhttp.open("GET",
"books.xml", true);
xhttp.send();
function myFunction(xml) {
var xmlDoc = xml.responseXML;
var x = get_firstChild(xmlDoc.getElementsByTagName("book")[0]);
document.getElementById("demo").innerHTML = x.nodeName;
}
//check if
the first node is an element node
function get_firstChild(n) {
var y = n.firstChild;
while (y.nodeType != 1) {
y = y.nextSibling;
}
return y;
}
</script>
</body>
</html>
انتاج:
title
شرح المثال:
- تحميل " books.xml " في xmlDoc
- استخدم الدالة get_firstChild في أول عقدة عنصر <book> للحصول على العقدة الفرعية الأولى التي تمثل عقدة عنصر
- إخراج اسم العقدة للعقدة الفرعية الأولى التي هي عقدة عنصر
مزيد من الأمثلة
يستخدم هذا المثال طريقة lastChild () ودالة مخصصة للحصول على آخر عقدة تابعة للعقدة
يستخدم هذا المثال طريقة nextSibling () ودالة مخصصة للحصول على العقدة الشقيقة التالية للعقدة
يستخدم هذا المثال الطريقة السابقة ()Sibling ووظيفة مخصصة للحصول على العقدة الشقيقة السابقة للعقدة