XML ، اکشن اسکریپت و فلش
در پلتفرم فلش ما با عناصر کاری فراوانی برای بسط و گسترش ایده های خود روبرو هستیم از صدا و ویدیو تا XML همه و همه قدرت خلق و کنترل برنامه های پیشرفته تحت این پلتفرم را برای ما مهیا می کنند ، XML به عنوان ساختار متداول و استاندارد ، برای وب و حتی برنامه های دسکتاپ ، نقش بسزایی در تامین نیازهای نوشتاری و متنی پلتفرم فلش بازی می کند به صورتی که تقریبا کمتر برنامه مترقی تحت وبی رامی توانید پیدا کنید که از XML بهره نبرده باشد .
در اکشن اسکریپت 2.0 ما با کلاس XML و توابع زیر گروه ان سرو کار داریم و استفاده از این کلاس ساده تر از ان است که نیازی به توضیح داشته باشد اگر چه این مقاله بیشتر برای آموزش استفاده از XML با اکشن اسکریپت 3.0 می باشد اما حداقل برای یک یادآوری کمی به ان می پردازیم .
XML در اکشن اسکریپت 2.0 یک زیر مجموعه از کلاس XMLNode و خود XMLNode زیر مجموعه Object می باشد و همانطور که می دانید در اکشن اسکریپ 2.0 ما برای لود دیتا و اطلاعات از یک XML به شکل زیر عمل می کردیم :
your_xml.onLoad = function(s) {
if (s) {
trace(this);// this ==> your_xml Data
trace(this.firstChild.nodeName);
} else {
trace("Error");
}
};
your_xml.load("your_xml_file.xml");
و برای دسترسی به باقی Node ها و Child ها از firstChild و childNodes استفاده می کردیم . در این بین childNodes بهترین گزینه برای کار کردن خواهد بود چرا که کلیه Node های زیر مجموعه یک Node دیگر را به صورت آرایه بر می گرداند و شما با استفاده از ایندکس انها به انها دسترسی خواهید داشت به مثال زیر توجه کنید .
your_xml.ignoreWhite = true
your_xml.onLoad = function(s) {
if (s) {
var nodes1 = this.childNodes;
for (var i=0 ; i<nodes1.length ; i++) {
var nodes2 = nodes1[i].childNodes;
for (var j=0 ; j<nodes2.length ; j++) {
trace(j+"==>"+ nodes2[j])
}
}
} else {
trace("Error");
}
};
your_xml.load("your_xml_file.xml");
زمانی که قرار باشد یک XML در متن کد ها جای بگیرد و نوشته شود ، مجبور بودیم انرا را به صورت String بنویسیم و انها را با استفاده از تابع parseXML به صورت XML برای این کلاس معرفی کنیم برای درک آسان ، String مربوطه را در چند خط و به صورتی مرتب می نویسیم
"<flash>"+
"<item>"+
"<name>dev01</name>"+
"</item>"+
"</flash>"+
"<ajax>"+
"<item>"+
"<name>dev01</name>"+
"</item>"+
"</ajax>"+
"<php>"+
"<item>"+
"<name>dev01</name>"+
"</item>"+
"</php>"+
"</developers>"
trace(xml_string.firstChild.childNodes[0].nodeName ) // undefined
var xml = new XML();
xml.parseXML(xml_string);
trace(xml.firstChild.childNodes[0].nodeName ) // flash
همین مقدار توضیح برای لود و استفاده از XML در فلش با استفاده از اکشن اسکریپت 2.0 کافی می باشد .
XML در اکشن اسکریپت 3.0
ما در اکشن اسکریپت 3.0 ساختار متفاوتی را برای XML تجربه می کنیم ، در اکشن اسکریپت 3.0 xml از استاندارد E4X پشتیبانی و تبعیت می کند و کلاس XML ی که در اکشن اسکریپت 2.0 با ان سروکار داشتیم در اینجا به XMLDocument تغییر نام یافته است و کلاس XML برای پشتیبانی از استاندارد E4X در نظر گرفته شده است که کاملا متفاوت با کلاس XML ی که در AS 2.0 می شناختید عمل می کند .
E4X از یک روش ساده و بسیار مفید برای دسترسی به xml استفاده می کند ، تقریبا عملکردی مشابه Object را شاهد خواهید بود که برای دسترسی به Node ها از نقطه dot استفاده می کند و برای دسترسی به یک Node خاص مجبور به استفاده از حلقه های تکرار مثل for و while نخواهید بود و مهمتر اینکه اکنون xml به صورت inline و در کنار کد ها بدون نیاز به کاراکتر “ و یا ‘ نوشته می شود و برای کلاس XML قابل درک خواهد بود
var xml:XML = <foo>
<test>
<vito>vito text</vito>
</test>
<exam>
<vb>exam 1</vb>
<vb>exam 2</vb>
</exam>
</foo>
trace(xml.test.vito) // ==> vito text
trace(xml.exam.vb) // ==> <vb>vb ex 1</vb> <vb>vb ex 2</vb>
trace(xml.exam.vb[1])// ==> exam 2
برای دسترسی به Node ها از نام Node و نقطه استفاده می کنیم و اولین گزینه مطابقی که در XML یافت شود بازگشت داده خواهد شد و در صورتی که Node مربوطه خود داری زیر گروه باشد حاصل یک XMLList خواهد بود
XMLList متفاوت از آرایه Array می باشد اما حاصل مشابه استفاده از تابع childNodes در اکشن اسکریپت 2.0 می باشد در انجا یک آرایه از Node ها برگشت داده می شد در اینجا یک XMLList .
تابع children() در اکشن اسکریپت 3.0 جایگزین childNodes در as2.0 شده است .
دسترسی به attribute ها هم از ساختار مبتنی بر نقطه بهره می برذ و برای ایجاد تفاوت بین نام Node و نام attribute ، از یک علامت @ قبل از نام attribute ی که به دنبال ان هستید قرار استفاده می کنیم .
<item name="attribute">
<name>element</name>
</item>;
trace(item.name); // "element"
trace(item.@name); // "attribute"
attributeها هم مانند Node می توانند به صورت XMLList برگشت داده می شوند ، در صورتی که در یک Node مشخص بیش از یک attribute مطابق یافت شود حاصل کار همه ان attribute ها خواهد بود که به صورت XMLList برگشت داده می شوند
<item>
<img url="pic1.jpg" />
<img url="pic2.jpg" />
<img url="pic3.jpg" />
</item>;
trace(pics.img.@url is XMLList); // true
trace(pics.img.@url); // "pic1.jpgpic2.jpgpic3.jpg"
trace(pics.img.@url[0]); // "pic1.jpg"
از دیگر قابلیتهای کلاس XML در اکشن اسکریپت 3.0 استفاده از ساختار فیلتر شده برای Node ها و attribute ها می باشد به مثال زیر توجه کنید :
<test>
<item>
<name>amir</name>
<info city="shiraz">
<age>25</age>
</info>
</item>
<item>
<name>reza</name>
<info city="shiraz">
<age>28</age>
</info>
</item>
</test>;
trace(test.item.(name == "amir") )
/*
<men>
<name>amir</name>
<info age="25">
<city>shiraz</city>
</info>
</men>
*/
trace(test.item.info.(@city == "shiraz" ) )
/*<info city="shiraz">
<age>25</age>
</info>
<info city="shiraz">
<age>28</age>
</info>
*/
trace(test.item.info.(age> 25) )
/*
<info city="shiraz">
<age>28</age>
</info>
*/
مثال ها به اندازه کافی گویا می باشد و توضیح بیشتری برای عملکرد ساختار E4X در اکشن اسکریپت 3.0 هم ضروری به نظر نمی رسد تنها یک مبحث باقی می ماند ان هم لود XML از یک فایل به درون برنامه که با نمونه کد اکشن اسکریپت زیر صورت می گیرد
var ul:URLLoader = new URLLoader(ur) ;
ul.addEventListener(Event.COMPLETE , loadComp)
function loadComp(e){
var your_xml:XML = (ul.data)
trace(your_xml)
}
ابتدا یک URLRequest برای ادرس درخواستی تعریف می کنیم و با استفاده از URLLoader این ادرس را لود می کنیم یک تابع به Event یا رویداد COPLETE لودر نسبت می دهیم و دیتای لود شده را درون متغییر می ریزیم .
کلمات کلیدی برای این نوشته :

اطلاعات این نوشته




چگونه می توان در ایکس ام ال بوسله فلش اطلاعات را ذخیره کرد یا همون نوشت
با سلام و احترام
ممنون از توضيحتون . راستش من يه كا ري بايد انجام بدم با اين عنوان كه يه pop up تو فلش باز ميشه و مطالب رو مي خوام از جاي ديگه html , xml , يا يه فايل ديگه بخونه . كد نويسيم قوي نيست . اما مي تونم يه كارايي انجام بدم و كد ها رو مي تونم تا حودودي بخونم . اما واسه اين كار گيج شدم چون اولين بارم ممنون مي شم من رو راهنمايي كنيد . تشكر