دوست عزیز قبل از اینکه بخوام در مورد XML توضیح بدم میخوام اول یه چیزایی در مورد XML بدونین پس قبل از شروع این سایتها برین تا درباره XML بدونین :
کد:
http://www.iritn.com/?action=show&type=news&id=2748
کد:
http://iasbs.ac.ir/it/archive/?p=37
و اما یه توضیح کوچیک اینکه XML یه ساختار درختی است که مثل هر درختی شاخه داره روی هر شاخه هم شاخه های دیگه و بالاخره هر شاخه کوچیک یه برگ و اما در XML هر شاخه رو node هر شخه کوچیک رو child میگن اما اینا به چه دردی میخوره من در اینجا یه ساختار ساده از XML میذارم و در مورش یه توضیح میدم
[PHP]<AccessPoints>
<AccessPoint>
<mac>00012345D723</mac>
<name>Prism I</name>
<channel>10</channel>
<signal>-60</signal>
<noise>-80</noise>
<snr>20</snr>
</AccessPoint>
<AccessPoint>
<mac>00067890D723</mac>
<name>Prism II</name>
<channel>11</channel>
<signal>-70</signal>
<noise>-70</noise>
<snr>25</snr>
</AccessPoint>
<AccessPoint>
<mac>00054321D723</mac>
<name>Prism III</name>
<channel>12</channel>
<signal>-80</signal>
<noise>-60</noise>
<snr>30</snr>
</AccessPoint>
</AccessPoints>[/PHP]
همینطور که میبینین در اینجا یه درخت اصلی داریم به نام AccessPoints و این درخت 3 تا شاخه اصلی به نام AccessPoint داره حالا هر شاخه هم چند تا شاخه کوچکتر به نامهای mac , name , channel , noise , snr داره که در هر سه شاخه مشترکن اما هر کدم توی هر شاخه اطلاعات خاصی رو ذخیره میکنن و حالا ما چطوری میتونیم این اطلاعات رو تجزیه و ذخیره کنیم خوب فلش در اینجا میاد کلاس XML رو در اختیار ما میذاره که به اون کلاس میشه هر فایل رو XML رو تجزیه کرد خوب بریم سراغ تجزیه (pares) :
[PHP]var ap = new Array();[/B]
ap_xml = new XML();
ap_xml.ignoreWhite = true;
ap_xml.load('data.xml');
ap_xml.onLoad = function(sucess) {
if (sucess) {
parseFile(ap_xml);
}
};
function AccessPoint(mac, name, channel, signal, noise, snr) {
this.mac = mac;
this.name = name;
this.channel = channel;
this.signal = signal;
this.noise = noise;
this.snr = snr;
}
function parseFile(xmlDoc_xml) {
temp = new Array();
for (var a = 0; a<xmlDoc_xml.firstChild.childNodes.length; a++) {
for (var b = 0; b<xmlDoc_xml.firstChild.firstChild.childNodes.leng th; b++) {
temp[b] = xmlDoc_xml.firstChild.childNodes[a].childNodes[b].firstChild.nodeValue;
}
n = new AccessPoint(temp[0], temp[1], temp[2], temp[3], temp[4], temp[5]);
ap.push(n);
}
}
for (var z = 0; z<ap.length; z++) {
trace(ap[z].mac);
trace(ap[z].name);
trace(ap[z].channel);
trace(ap[z].signal);
trace(ap[z].noise);
trace(ap[z].snr);
}[/PHP]
خوب در اینجا ما یه ارایه تعریف مکنیم به نام pa که کارش اینه که متغیرهای موجود در LMX رو در خودش ذخیره کنه خوب ما یک نمونه از کلاس LMX رو میاریم داخل فلش با استفاده از این خط :
[PHP]ap_xml = new XML();[/PHP]
حالا در خط بعدی چون هر فایل LMX فواصل خالی داره و خوندن اون واسه فلش مشکل میشه ما میایم با استفاده از این خط به فلش میگیم تا از این فواصل صرفنظر کنه
[PHP]ap_xml.ignoreWhite = true;[/PHP]
حالا مسر فایل LMX رو به فلش میدیم تا اون رو فایل رو لود کنه البته این خط کد مهم نیست که بالاتر از خط قبلی یه بعدش میاد چون فلش تا فایل LMX رو پیدا نکنه هیچ کاری نمیکنه خوب ما یه تابع مینویسیم و به فلش میگیم هر موقع فایل LMX رو پیدا کرده و تونست صحیح لودش کنه تابع parseFile رو که یک پارامتر به نام xmlDoc_xml داره رو اجرا کنه :
[PHP]ap_xml.onLoad = function(sucess) {
if (sucess) {
parseFile(ap_xml);
}
};[/PHP]
و اما تابع AccessPoint (اشتباه نکنین که اسم تابع با اسم شاخه درخت برابر چون این نام اختیاریه) و اما این تابع 6 تا ارگومان قبول میکنه و پارامترهای mac, name, channel, signal, noise, snr (که بازم اینا اختیاریه) رو با این ارگومانها برابر میکنه
[PHP]function AccessPoint(mac, name, channel, signal, noise, snr) {
this.mac = mac;
this.name = name;
this.channel = channel;
this.signal = signal;
this.noise = noise;
this.snr = snr;
}[/PHP]
و اما تابع parseFile که کار اصلی رو میکنه من فقط میخوام در مورد کار تابع توضیح بدم ما دوباره در اینجا یک ارایه
تعریف میکنیم که مقدار nodeValue هر شاخه فرعی اخری رو در خودش ذخیره میکنه (البته من در مورد حلقه های تکرار بحث نمیکنم چون میدونم در اینجمن زیاد در موردش بحث شده ) همونطور که میدونین هر حلقه تکرار باید یه مقدار رو از یه بازه شروع و در یه جای بهش خاتمه بده حالا ما این حلقه رو اینطور تعریف میکنیم از از مقدار a = 0 شروع و به مقدار شاخه های درخت تموش کنه (3 تا شاخه داریم) و اما در مورد
[PHP]a<xmlDoc_xml.firstChild.childNodes.length[/PHP]
این خط به ما میگه که درخت ما چندتا شاخه داره و در خط بعدی (b)میگه هر شاخه چندتا شاخه کوچیک داره ( همون mac, name, channel, signal, noise, snr )
[PHP]b<xmlDoc_xml.firstChild.firstChild.childNodes.leng th[/PHP]
خوب بعدش ما این حلقه رو 3 بار برای هر شاخه بزرگ و 6 بار برای شاخه های کوچیک انجام میدیم و مقادیر هر شاخه رو برای ارایه temp[b] ذخیره میکنیم حالا در خط بعدی با تابع AccessPoint که تعریف کردیم ارگومان های این تابع رو برای مقادیر ذخیره شده ارایه temp میذاریم که به وسیله این کد این مقادیر رو برای ارایه که در اول کار تعریف کردیم مچسبونیم
حالا کار تموم شد ما میتونیم با حلقه ای که در اخر تعریف کردیم مقدار رو برداریم و باهاش کار کنیم من در اینجا این مقادیر رو در هر textfield نشون میدم و این نمونه کار (بنا به درخواست دوستان)
اینم نمونه :
کد:
http://www.mediafire.com/?sharekey=7d2d0b9a457a6845b94117dade8fc295e04e75f6e8ebb871