شما به سه روش می توانید به 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 می شود خود متن

 
 مشاهده و اجرای برنامه کامل
ویژگیهای مهم هر node

 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 به ان اشاره کرد

 
 مشاهده و اجرای برنامه کامل