نمایی از E4x

pb559blue

Active Member
گوشه ای از E4x

/*
Hasan Otuome, Chief Architect for Marx Media (http://www.marxmedia.net/)
Email: hasan [at] marxmedia dot net
Source: ActionScript.org
Translated by Shayan Assil
*/

تا به امروز کار با داده های XML در Flash بطور مستقیم نبوده و این مشکل اساسا بعلت شکل زبان ActionScript میباشد. ولی با ظهور AS3 ما یک روش جدید را از طریق E4X در پیش رو داریم. برای آنهایی که نمیدانند : E4X استانداردی از سمت ECMAScript برای XML میباشد که قابلیت ها و خصوصیات جدیدی را معرفی میکند که کار با XML را بسیار ساده کرده است. از اجزای جدید AS3 ، XML ، XMLList ، QSpace و کلاس های داخل فضای نام (Namespace) E4X میباشند.E4X تنها کار شما را ساده نمیکند بلکه استحکام و روش بسیار آشنایی در کد نویسی را به شما معرفی میکند. (ما میتوانیم از Dot Syntax همانند ActionScript استفاده کنیم).
کار را از XML های Literals یا خطی (Inline) شروع میکنیم و در ادامه به سراغ فایل های XML خارجی میرویم برای اینکه شما زمان زیادی را برای بارگذاری XML ها از منابع خارجی صرف میکنید.ببینید که چطور کارها ساده شده اند :​

کد:
//create a new XML object
var company: XML = 
 <employees>
  <employee id="1"><name>John</name><dept>IT</dept></employee>
  <employee id="2"><name>Susan</name><dept>Marketing</dept></employee>
   </employees>;

به انداره ی کافی ساده است، درسته ؟ حالا توابعی را ایجاد میکنیم که بتوانید از آنها دوباره استفاده کنید و آنها را در محیط امتحان کنید.
کد:
//create a printer function since we'll be reusing this routine
function echo () {
 //print the data to the output panel
 for each (var e in company.employee) {
 trace ("Employee: "+e.name+" works in the "+e.dept+" Dept.");
 }
}

//print the results
echo ();

ما تنها از یک حلقه for … each برای حرکت در داخل XML و بدست آوردن اطلاعاتی که به آنها نیاز داریم استفاده کردیم.حالا برای اضافه کردن یک employee جدید به XML چطور؟

کد:
//to add a new employee
company.employee += 
 <employee id="3"><name>Carl</name><dept>Research</dept></employee>; 

//print the results
echo ();

حالا فرض میکنیم که شما در داخل XML به دنبال یک employee خاص میگردید و میخواهید مقدار عنصر Department آن را تغییر بدهید.یک راه برای انجام این کار وجود دارد:

کد:
//assign Carl to a department
company.employee.(@id==3).dept = "IT"; 
//print the results
echo ();

کد فوق Carl را به دپارتمان IT منتقل میکند.قست (@id==3) از کد بالا یک نوع فیلتر میباشد که آنرا Filter Predicate میخوانند (شرطی که توسط آن فیلتر میکنید – a/k/a ) و کاملا مشابه عبارت WHERE در SQL عمل میکند :

کد:
SELECT employee FROM company WHERE id=3

با این کار ما عنصر یا گره ی employee را از آبجکت company در جایی که id آن برابر با 3 میباشد بدست آوردیم.
ممکن است بگویید " این عمل فوق العاده است، اما در مورد XML های خارجی چطور؟ " خوب ، مسئله ای نیست. این مورد تنها کمی با AS2 تفاوت دارد.برای انجام آن ما به استفاده از دو کلاس جدید در AS3 نیاز داریم : URLLoader و URLRequest.کلاس URLRequest جایگزین getURL() میشود و میتوانید URLLoader را مثل MovieClipLoader فرض کنید که به ما امکان کنترل کردن بارگذاری را میدهد.

کد:
var company:XML;
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("company.xml");

loader.load(request);
loader.addEventListener(Event.COMPLETE, onComplete);

function onComplete(event: Event):void{
   var loader:URLLoader = URLLoader(event.target);
   company = new XML(loader.data);
   trace(company.toXMLString());
}

خوب به آنچه نیاز داشتیم رسیدیم اما چطور بدون آگاهی از نام گره ی اصلی (Root node) در ساختار XML پیماش کنیم؟

کد:
//to get to the array of child nodes
var nodes = company.children ();

از این متد بجای XML.firstChild.childNodes استفاده میکنیم که قابل درک بوده و فهم ارتباط آن ساده است.
البته ما تمام جنبه های E4X را پوشش ندادیم اما امیدواریم این معرفی کوچک راه حل هایی را پیش روی شما قرار داده باشد تا بتوانید از آنها در برنامه ی بعدی خود استفاده ببرید.

امیدوارم منو بابت دیر کرد ببخشید (مخصوصا شما CMAX جان) و بابت ویرایش نامناسب معذرت میخوام چون عجله داشتم !!!
 
آخرین ویرایش:

CMAX

Member
ممنون دوست من
خوب حا لا AS 3 داره حداقل یکمی شکل و شمایلش رو شبیه باقی زبانهای برنامه نویسی می کنه و البته سخت گیری
در نوشتن برنامه ها به نفع همه اونایی که می فهمند و به ضرر همه اونایی که نمی فهمند است
در مورد support ٍٍE4x هم باید خوشحال بود ولی با توجه با اینکه Schema Validation در زمان Compile انجام می گیرد
خروجی بسیاری از برنامه های دوستان TypeErrorهای متوالی خواهد بود و از فردا باید مجید انلاین یه انجمن هم
برای رفع مشکلات این دوستان فلشکار برای شمای صحیح Xml بزند .اگر چه XMLObject قبلی خود AS تحت AS 3
هنوز به جای خود باقی است و با نام XMLDocument از پکیج flash.xml قابل دست رسی است و دوستان می تونند از اون همچنان استفاده کنند
در نهایت واقعا حیف از اون همه کلاسها یی که برای parse xml تحت AS2 نوشته شد .:wink:

بازم تشکر می کنم از شما pb559blue
 

جدیدترین ارسال ها

بالا