در این قسمت می خواهیم درباره ی دریافت مقدار node صحبت کنیم. فرض کنید تگ زیر را دارم
<price ab=”ddd” > 123 </price>
در تگ بالا ۳ تا node داریم :
node اول از نوع element یا تگ که همان price است
node دوم از نوع attribute یا صفت که همان ab است و مقدار ان ddd است
node سوم از نوع text است این node فرزند تگ price است و مقدار ان ۱۲۳ است
( نکته : هیچوقت نگوئید متن بین یک تگ مقدار ان است چون هیچوقت تگ ها مقدار ندارند
بلکه متن درون یک تگ خود یک node است که فرزند ان تگ است و مقدار این node می شود خود همان متن ! )
حالا فرض کنید در یک برنامه html می خواهید مقدار متنی تگ price را استفاده کنید
از ویژگی nodeValue برای دریافت مقدار متنی یک node استفاده می شود
( مقدار در فایل xml از نوع متنی است )
اما برای بدست اوردن مقدار یک صفت از متد زیر استفاده می کنیم :
getAttribute()
دریافت مقدار یک تگ یا همان المنت
در مدل dom ، هر چیزی یک node است و node های از نوع تگ یا همان المنت هیچ مقداری ندارند
متن بین تگ باز و بسته مقدار ان تگ نیست بلکه خودش یک node فرزند از نوع متنی ، برای ان تگ است
برای دریافت مقدار متنی موجود در یک تگ ، باید مقدار متنی فرزند متنی ا ن تگ را دریافت کنید !
اگر متد getElementsByTagName روی فایل مثلا books.xml اعمال شود انگاه لیستی از node هایی را بر می گرداند که شامل لیستی از تما م تگ هایی است که اسمشان را در پرانتز جلوی این متد مشخص کرده ایم
مثال :
دستورات زیر ابتدا متغیر xmldoc را به فایل books.html اشاره می دهد(البته با تابعی که در فصل اول گفتیم و نام ان loadxmldoc بود )
سپس
اولین تگ با نام title را از ان دریافت می کند
xmlDoc=loadXMLDoc(“books.xml”);
x=xmlDoc.getElementsByTagName(“title”)[0];
در کروشه ، شماره اندیس تگ مورد نظرتان را بنویسید
مثلا اگر فقط سومین تگ title را بخواهید باید در کروشه بنویسید ۲
چون اندیسها از صفر شروع می شوند
اما اگر همه تگ های title را بخواهید کلا کروشه را ننویسید
ویژگی childNodes لیستی از فرزندان درو ن یک node از نوع المنت را بر می گرداند
در فایل books.html ، تگ title فقط یک فرزند دارد و ان هم یک node از نوع متن است
مثال زیر ابتدا اشاره گری به نام x به اولین تگ title ایجاد می کند
سپس اشاره گری به نام y به اولین فرزند تگ title ایجاد می نماید
x=xmlDoc.getElementsByTagName(“title”)[0];
y=x.childNodes[0];
اگر تمام فرزندان را بخواهید کروشه را حذف کنید
ویژگی nodeValue مقدار فرزند node المنت را بر می گرداند
x=xmlDoc.getElementsByTagName(“title”)[0];
y=x.childNodes[0];
txt=y.nodeValue;
مقدار متغیر txt برابر خواهد شد با “Everyday Italian”
دریافت مقدار یک صفت
بر طبق مدل dom ، صفتها یک نوع node هستند
برخلاف انچه برای node های المنت گفتیم که متن درو ن انها مقدار انها نیست بلکه خودش یک node است و فرزند المنت است
مقدار متنی یک صفت مستقیما مقدار ان صفت است نه فرزند ان صفت
برای دریافت مقدار یک صفت می توانیم از متد getAttribute یا ویژگی nodeValue استفاده کنیم
از nodevalue به این صورت استفاده می کنیم که مقدار node صفت را مشخص کند مثل انچیزی که برای node های متنی گفتیم عمل کنید
روش استفاده از getAttribute
متد getAttribute مقدار یک صفت را بر می گرداند
فرض کنید در فایل books.xml اولین تگ titile بصورت زیر است
<title lang=”en”>Everyday Italian</title>
حالا می خواهیم دستوراتی بنویسیم که مقدار صفت lang اولین تگ title را بدهد
xmlDoc=loadXMLDoc(“books.xml”);
txt=xmlDoc.getElementsByTagName(“title”)[0].getAttribute(“lang”);
مقدار متغیر txt برابر en خواهد شد
اگر می خواهید ببینید چگونه می توان با استفاده از یک حلقه به مقدار صفت lang تمام تگ های title دسترسی داشت اینجا کلیک کنید
روش استفاده از getAttributeNode
این متداشاره گری به صفت مورد نظر ما در فایل xml ایجاد می کند
مثال :
دستورات زیر مقدار متنی صفت lang اولین تگ titile را بر می گرداند
xmlDoc=loadXMLDoc(“books.xml”);
x=xmlDoc.getElementsByTagName(“title”)[0].getAttributeNode(“lang”);
txt=x.nodeValue;
خط اول :
ایجاد اشاره گر به فایل books.xml
خط دوم :
ایجاد اشاره گری به صفت lang اولین تگ title
خط سوم :
قرار دادن مقدار این صفت که x دارد به ان اشاره می کند در متغیر txt