در این قسمت می خواهیم درباره ی روش های مختلف دسترسی به node ها صحبت کنیم. شما به سه روش می توانید به NODE های درون یک سند xml دسترسی داشته باشید :

  •     با استفاده از متد getElementsByTagName
  •     با ایجاد یک حلقه روی درخت node سند xml
  •     با استفاده از رابطه بین node ها در درخت xml node

متد getElementsByTagName
این متد تمام تگ هایی را که در سند xml هستند و اسم انها ان چیزی است که در پرانتز این متد ذکر شده بر می گرداند
روش استفاده از این متد :

node.getElementsByTagName(“tagname”);

مثال
دستور زیر تمام تگ های با نام titile سند xml که درون تگ x هستند را بر می گرداند

x.getElementsByTagName(“title”);

اما اگر بخواهید تمام تگ های با نام titile را صرف نظر از اینکه در کجای سند قرار دارند بر گردانید از دستور زیر استفاده می کنیم :

xmlDoc.getElementsByTagName(“title”);

xmlDoc یعنی خود سند xml
لیست node های dom
دستور getElementsByTagName لیستی از node را بر می گرداند
لیست node در اصل ارایه ای از node هامی باشد
دستور زیر  با تابع loadXMLDoc باعث بار گذاری فایل “books.xml” در متغیر xmlDoc  می شود
و باعث ذخیره شدن لیستی از node های با نام title در متغیری به نام x می شود

xmlDoc=loadXMLDoc(“books.xml”);

x=xmlDoc.getElementsByTagName(“title”);

به  عناصر (element) های titile را می توان توسط اندیس دسترسی داشت  برای دسترسی به سومین تگ title باید دستور زیر را بنویسید :

(البته این دستور در ادامه دو دستور قبل است که مقدار ارایه x مشخص شد )

y=x[2];

 اندیس از صفر شروع می شود

طول ارایه
ویژگی length  تعداد خانه های ارایه node را مشخص می کند
که می توان از این ویژگی برای دسترسی به خانه های ارایه  توسط حلقه استفاده کرد
مثال:

xmlDoc=loadXMLDoc(“books.xml”);

x=xmlDoc.getElementsByTagName(“title”);

for (i=0;i<x.length;i++)
{
document.write(x[i].childNodes[0].nodeValue);
document.write(“
“);
}
توضیحات :

xmlDoc=loadXMLDoc(“books.xml”);

از این به بعد ، متغیر xmldoc به فایل books.xml اشاره می کند

x=xmlDoc.getElementsByTagName(“title”);

هر خانه ارایه x به یک تگ titile از فایل books.xml اشاره می کند

for (i=0;i<x.length;i++)

به تعداد خانه های ارایه x دستورات  درون حلقه for تکرار می شوند

document.write(x[i].childNodes[0].nodeValue);

در خروجی عبارت زیر نوشته می شود

مقدار اولین node که در تگ titile ای که خانه ارایه x با اندیس i به ان اشاره می کند

که قبلا گفتیم در هر تگ title در این مثال ، یک متن وجود دارد

خود متن یک node از نوع text است که  چون تنها node درون title است اندیس ان صفر است

و مقدار nodevalue می شود خود متن

documentElement  یعنی node ریشه . تمام محتوای سند xml ما در node ریشه نوشته می شوند

nodeName  نام node است

nodeType نوع node است

( هر نوع node دارای شماره ای است . در فصل بعدی با انواع node و شماره هریک اشنا می شوید )

حرکت در بین node ها
دستورات  حلقه زیر برای node های فرزند انجام می شود
که این node ها در اصل element هایی در node ریشه هستند
مثال

xmlDoc=loadXMLDoc(“books.xml”);

x=xmlDoc.documentElement.childNodes;

for (i=0;i<x.length;i++)
{
if (x[i].nodeType==1)
{//Process only element nodes (type 1)
document.write(x[i].nodeName);
document.write(“
“);
}
}
توضیحات :

xmlDoc=loadXMLDoc(“books.xml”);

از این به بعد ، متغیر xmldoc به فایل books.xml اشاره می کند

x=xmlDoc.documentElement.childNodes;

همانطور که قبلا گفتیم ویژگی documentElement به تگ ریشه فایل xml اشاره دارد این یعنی تمام node هایی که فرزند اصلی و بی واسطه تگ ریشه هستند در ارایه x قرار بگیرند.
و شما می دانید که  هر کدام از این فرزندان ممکن است خود صاحب فرزندان دیگری باشند

فقط  اشاره گری به فرزندان اصلی تگ ریشه در ارایه قرار می گیرند

و فرزندان این فرزندان اصلی دیگر مورد نظر نخواهند بود

for (i=0;i<x.length;i++)

برای تمام خانه های ارایه x دستور if درون حلقه انجام می شود

if (x[i].nodeType==1)

در صورتیکه مقدار ویژگی nodetype برای  node ای که خانه i ام x به ان اشاره می کند برابر یک باشد انگاه دستورات درون if اجرا می شود

مقدار یک یعنی ان node از نوع تگ است

می دانید انواع دیگر node وجود دارد مثل node صفت یا node متن

document.write(x[i].nodeName);

نام  node ای را که خانه i ام x به ان اشاره دارد  در خروجی نمایش می دهد

بدست اوردن node هایی که در رابطه با هم اند
برنامه زیر از ارتباط بین node ها استفاد می کند

xmlDoc=loadXMLDoc(“books.xml”);

x=xmlDoc.getElementsByTagName(“book”)[0].childNodes;
y=xmlDoc.getElementsByTagName(“book”)[0].firstChild;

for (i=0;i<x.length;i++)
{
if (y.nodeType==1)
{//Process only element nodes (type 1)
document.write(y.nodeName + “
“);
}
y=y.nextSibling;
}
توضیحات :

xmlDoc=loadXMLDoc(“books.xml”);

از این به بعد ، متغیر xmldoc به فایل books.xml اشاره می کند

x=xmlDoc.getElementsByTagName(“book”)[0].childNodes;

اگر فکر کنیم تگ ریشه چندین فرزند با نام book داشته باشد اندیس صفر در این دستور یعنی اشاره به اولین فرزند با نام book  ریشه و کلمه childnodes برای ان یعنی تمام node های فرزند book اول حالا اشاره گری به همه این فرزندان  در ارایه x قرار می گیرد و تعداد خانه های ارایه x برابر می شود با تعداد این فرزندان

y=xmlDoc.getElementsByTagName(“book”)[0].firstChild;

متغیر y  به اولین فرزند اولین تگ با نام book اشاره خواهد کرد

for (i=0;i<x.length;i++)

برای تمام خانه های ارایه x دستور if درون حلقه تکرار می شود

if (y.nodeType==1)

اگر node ای که yبه ان اشاره دارد از نوع تگ باشد ، دستورات درون if انجام می شوند مقدار یک یعنی ان node از نوع تگ است

می دانید انواع دیگر node وجود دارد مثل node صفت یا node متن

document.write(y.nodeName + “”);

نام node ای که متغیر y به ان اشاره دارد نمایش داده می شود

y=y.nextSibling;

به فرزند بعدی اولین تگ book اشاره می کند

که این فرزند بعدی در واقع nextSibling یا همان خواهر برادر بعدی برای node قبلی است که y به ان اشاره کرد