در این قسمت می خواهیم درباره ی نحوه ی  ایجاد کردن لیست نودها صحبت کنیم. زمانیکه شما از ویژگی چون childNodes و یا متدهایی چون getElementsByTagName انگاه جواب یک لیست یا ارایه ای از اشیای node هاست  هر خانه از این لیست یک شماره می گیرد که شماره اولین خانه صفر است
تصویر زیر اطلاعات مربوط به node با نام title و node های درون ان را نشان می دهد  در فایل books.xml ما کلا چهار تا node با نام titile داریم
درون title ما دو node دیگر داریم
یکی از نو صفت است و دیگری از نوع text
مثال

در قسمت زیر تابعی به نام loadXMLDoc تعریف می کنیم

( این تابع را به خاطر داشته باشید زیرا در تمامی مثالهای  فصلهای اموزش xml dom از ان استفاده می کنیم )

این تابع اشاره گری به نام xmldoc به فایل books.xml ایجاد می کند

function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
{
xhttp=new XMLHttpRequest();
}
else
{
xhttp=new ActiveXObject(“Microsoft.XMLHTTP”);
}

xhttp.open(“GET”,dname,false);

xhttp.send();

return xhttp.responseXML;
}

دستورات این تابع در قسمت های بعدی اموزش زبانهای xml مثل xslt و xpath کاملا توضیح داده شده است

حالا اول تابع  loadXMLDoc را صدا می زنیم تا اجرا بشه

و سپس لیستی از node هایی که اسمشون title است را از فایلی که xmldoc به ان اشاره می کند گرفته در x قرار می دهیم

xmlDoc=loadXMLDoc(“books.xml”);

x=xmlDoc.getElementsByTagName(“title”);

مثال
قطعه کد زیر ، text برای اولین node به نام title از ارایه x را بر می گرداند

txt=x[0].childNodes[0].nodeValue;

ویژگی length مربوط به لیست یا ارایه  node ها  شی ای که در اصل ارایه ای از node ها می شود ، همیشه بروز خواهد بود

یعنی اگر در سند xml یک المنت حذف یا اضافه شود ، این تغییرات روی ارایه هم ایجاد خواهد شد ویژگی length مربوط به ارایه node ها تعداد node های دورن لیست را بر می گرداند
مثال

قطعه برنامه زیر ، یک فایل xml به نام books را در متغیری به نام xmldoc را با استفاد ه از تابع ای که خودمان ساخته ایم و نام ان loadxmldoc  است ، بار گذاری می کند
و تعداد المنت هایی در سند xml که نامشان titile است را بر می گرداند

xmlDoc=loadXMLDoc(“books.xml”);

x=xmlDoc.getElementsByTagName(‘title’).length;

 بعد از اجرای دستورات بالا ،مقدار x برابر ۴ می شود

 اما کاربرد ویژگی length چیست ؟

از این ویژگی می توان در یک حلقه استفاده کرد و کارهایی را با تمام node های موجود در لیست node هایی که ایجاد کرده ایم انجام دهیم

مثال

دستورات زیر کارهایی را روی تمام node های titile که درو ن لیست هستند انجام می دهد

xmlDoc=loadXMLDoc(“books.xml”);

//the x variable will hold a node list
x=xmlDoc.getElementsByTagName(‘title’);

for (i=0;i<x.length;i++)
{
document.write(x[i].childNodes[0].nodeValue);
document.write(“
“);
}

دستورات بالا بازای هر node در ارایه x ،  مقدار  اولین node دورن ان را در خروجی نمایش می دهد

خروجی برنامه بالا :

Everyday Italian
Harry Potter
XQuery Kick Start
Learning XML
در برنامه بالا :

با استفاده از تابع loadxmldoc فایل books.xml در متغیر xmldoc بار گذاری می شود

متغیر x برای نگه داشتن تمام node هایی که اسم انها titile است تنظیم می شود

مقدار تمام node های متنی که درون node های titile هستند در خروجی نمایش داده می شود
لیست صفتهای هر تگ

ویژگی attributes  لیستی از node های صفتهای مربوط به المنت مشخص شده را بر می گرداند لیست صفتها با تغییر مقدار و یا حذف صفتها از فایل اصلی xml به روز رسانی می شود
فقط توجه داشته باشید برای دسترسی به هر تگ با استفاده از نام ان تگ از متد getelementbytagname استفاده کردیم

اما از انجا که صفتها یک تگ نیستند بلکه یک گزینه هستند پس برای دسترسی به صفتها از متدgetNamedItem استفاده می کنیم

مثال

قطعه برنامه زیر با استفاده از تابع loadxmldoc فایل books.xml را در متغیر xmldoc بار گذاری می کند

و سپس لیستی از صفتهای موجود در اولین المنت این فایل را که نام ان book است را بر می گرداند

xmlDoc=loadXMLDoc(“books.xml”);

x=xmlDoc.getElementsByTagName(‘book’)[0].attributes;

 بعد از اجرای دستورات بالا نتیجه دستور x.length برابر تعداد صفتهای موجود در node المنت book اول است  قطعه کد زیر مقدار صفت category المنت book و همچنین تعداد صفتهای اولین book را نشان می دهد

xmlDoc=loadXMLDoc(“books.xml”);

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

document.write(x.getNamedItem(“category”).nodeValue);
document.write(” ” + x.length);

 در خط دوم ، لیستی از صفتهای اولین تگ book در متغیر x قرار می گیرد در واقع x می شود یک ارایه هر خانه ان به یکی از این صفتها اشاره خواهد کرد

خط سوم :

متد getNamedItem برای دسترسی به صفتی به نام category بکار می رود و nodeValue یعنی مقدار این صفت را نمایش بده

خروجی دستورات بالا :

cooking
۱