در این قسمت می خواهیم درباره ی نحوه ی ایجاد کردن لیست نودها صحبت کنیم. زمانیکه شما از ویژگی چون 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
۱