تحديد العناصر XML DOM

يمكن تحديد العقدة باستخدام العلاقات بين العقد.

مثال

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

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

الحصول على العقدة الأم
يستخدم هذا المثال خاصية parentNode للحصول على العقدة الأم للعقدة.
الحصول على أول ابن العقدة
يستخدم هذا المثال طريقة firstChild() ووظيفة مخصصة للحصول على أول ابن لعقدة.

توجيه العقد DOM

يتم الوصول إلى العقد في شجرة العقدة من خلال العلاقات بين العقد، ويُطلق عليها عادةً "توجيه العقد" ("navigating nodes").

تحدد العلاقات بين العقد في XML DOM كخصائص العقدة:

  • parentNode
  • childNodes
  • firstChild
  • lastChild
  • nextSibling
  • previousSibling

يظهر الشكل التالي: books.xml جزء من شجرة العقدة ويوضح العلاقات بين العقد:

شجرة العناصر DOM

DOM - العقدة الأم

جميع العقدة لديها عقدة أم واحدة فقط. يحدد الكود التالي العقدة الأم لـ <book>:

xmlDoc=loadXMLDoc("books.xml");
x = xmlDoc.getElementsByTagName("book")[0];
document.write(x.parentNode.nodeName);

توضيح المثال:

  • من خلال استخدام loadXMLDoc() وضع "books.xml" يتم تحميلها إلى xmlDoc "
  • الحصول على العنصر <book> الأول
  • إخراج اسم العقدة الأم لـ "x"

TIY

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

Firefox، بالإضافة إلى بعض المتصفحات الأخرى، تعتبر الفراغات الفارغة أو الرسوم البيانية كعقدة نصية، بينما لا تفعل ذلك IE.

هذا قد يؤدي إلى مشكلة عند استخدام الاتجاهات التالية: firstChild،lastChild،nextSibling،previousSibling.

لمنع التوجيه إلى عقدة نصية فارغة (الفراغات بين العناصر ورموز النسخ واللصق)، نستخدم وظيفة لتحقق من نوع العقدة:

function get_nextSibling(n)
{
y = n.nextSibling;
while (y.nodeType!=1)
  {
  y=y.nextSibling;
  }
return y;
}

مع هذه الوظيفة، يمكننا استخدام get_nextSibling(node) بدلاً من خاصية node.nextSibling.

توضيح الكود:

نوع عقدة العنصر هو 1. إذا لم تكن العقدات على نفس المستوى عناصر، انتقل إلى العقدة التالية حتى تجد عقدة عنصر. من خلال هذه الطريقة، يمكنك الحصول على نفس النتيجة في IE و Firefox.

الحصول على العقدة الأولى

يظهر الكود التالي أول عقدة <book> من العناصر

<html>
<head>
<script type="text/javascript" src="loadxmldoc.js">
</script>
<script type="text/javascript">
//تحقق من أن العقدة الأولى هي عقدة عنصر
function get_firstChild(n)
{
y=n.firstChild;
while (y.nodeType!=1)
  {
  y=y.nextSibling;
  }
return y;
}
</script>
</head>
<body>
<script type="text/javascript">
xmlDoc=loadXMLDoc("books.xml");
x=get_firstChild(xmlDoc.getElementsByTagName("book")[0]);
document.write(x.nodeName);
</script>
</body>
</html>

الناتج:

title

توضيح المثال:

  • من خلال استخدام loadXMLDoc() وضع "books.xml"تحميل xmlDoc"
  • استخدام دالة get_firstChild على العنصر الأول <book> للحصول على العقد الأول في العقد المكون من العناصر
  • توليد اسم العقد الأول للابناء (العقد المكون من العناصر)

TIY

مثال

في المثال التالي يتم استخدام نفس الدوال بشكل مشابه:

  • firstChild: TIY
  • lastChild: TIY
  • nextSibling: TIY
  • previousSibling: TIY