ActionScript 3.0 ve XML
26 Temmuz 2009, admin
[adrotate group="2" banner="1"]
Bu derste XML veriyi As3 kullanarak flash’e aktaracağız. Yapıyı, kolay anlaşılması açısından basit tuttum. Bunun için bir başlık, bir içerik yazısı ile yine bir adet resim dosyası kullanıyorum.
İlk önce Xml dosyamızı hazırlayalım; Bunu herhangi bir html editöründe veya daha basit olarak bir notepad uygulamasında da yapabilirsiniz. Aşağıda oluşturduğum xml yapısını kullanıyorum ve data ismiyle xml dosyası olarak kaydediyorum.
<data>
<title name="Başlık">
<content>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled.</content>
<image>img.jpg</image>
</title>
</data>
NOT: Eğer note pad kullanıyorsanız; Türkçe karakterler için dosyayı unicode olarak kaydetmeniz gerekecek, yada flash içerisine Türkçe karakterleri embed etmeniz lazım. Aslında bununla ilgili ayrı bir ders yazmak gerktiğini düşünüyorum, vakit bulursam tabi…
Şimdi ise flash içerisindeki yapıyı hazırlayalım. Yeni bir flash dosya yaratırken Flash File (Actionscript 3.0) olarak seçiyorum.
Evet dosyamızı yarattıktan sonra, ilk önce Save as ile as3_xml ismiyle kaydettim.
NOT: Kullanacağımız data.xml dosyası ve resim dosyasının as3_xml.fla dosyasıyla aynı dizinde olmasına dikkat edelim.
Şimdi sahnemize 2 tane dinamik text ekliyorum. Bunları sahnede alt alta yerleştirdim. Şimdi, üsttekinin (Başlık için olacak) üzerine tıklayarak Properties (özellikler) penceresinde Text Type’ı Dynamic Text olarak seçtikten sonra instance name (örnek isim) kısmına title_txt yazıyorum, bunun Line Type’ını Single line yaptım. Aynı şekilde alttaki text için (İçerik için olacak) Dynamic Text, instance name olarak content_txt ve Multiline şeklinde ayarlamamı yaptım. Diğer ayarları ben kendime göre düzenledim.
Şimdi ise sahneye bir tane boş Movie clip ekleyeceğim. Yeni bir layer açtım Insert menüsünden New Symbol seçiyorum, çıkan pencerede name kısmına img yazdım ve Type’ı Movie clip olarak seçiyorum, sonra da okeyliyorum.
Movie clip’i yarattık. Tekrar ana sahneye dönüyorum (Scene 1′e tıklayarak). Yeni yarattığım layer seçili iken Library’den (Kütüphane) img ismli Movie clip’imi sürükle bırak yönetmiyle sahneye, istediğim bir yere yerleştiriyorum. Buna da img_mc örnek ismini verdim. Sahnede ki görüntü; resimdeki gibi oldu.
Artık ActionScript kodumuzu yazabiliriz; en üste yeni bir layer açtım ve f9 a basarak actions panelini açıyorum, ve aşağıdaki kodu ekliyorum.
var req:URLRequest = new URLRequest("data.xml");
var myLoader:URLLoader = new URLLoader();
myLoader.dataFormat = URLLoaderDataFormat.TEXT;
function dataLoaded(evt:Event):void {
try {
var myXML:XML = new XML(evt.target.data);
title_txt.text = myXML.title.@name;
content_txt.text = myXML.title.content;
var loader:Loader = new Loader();
img_mc.addChild(loader);
loader.load(new URLRequest(myXML.title.image));
} catch (e:TypeError) {
trace("hata");
trace(e.message);
}
}
myLoader.addEventListener(Event.COMPLETE, dataLoaded);
myLoader.load(req);
Buraya kadar herşey yolunda gittiyse CTRL + ENTER tuşlarıyla deneme yapabilirsiniz.
Şimdi kod içerisinde neler döndüğünü açıklamaya çalışayım;
Xml dosyamızı dışarıdan alabilmek için URLRequest sınıfını kullanıyoruz, bunun için req isimli bir değişken yarattım. req değişkeniyle dosya erişim bilgisini URLLoader sınıfını kullanarak myLoader isimli bir başka değişkenle load (yükleyeceğim) edeceğim. Veriyi Text şekilinde alacağım.
myLoader değişkenine olay dinleyicisi ekliyorum ve yükleme tamamlandığında dataLoaded adlı fonksiyonu çalıştırıyoruz.
Fonksiyon içerisinde; gelen xml veride herhangi bir hata için try catch kullanıyorum. Xml veriyle çalıştığımız için XML sınıfını kullandım. Burada farklı olan; xml elementlerde nokta kullanırken attributelerde @ işareti kullanarak gelen veriyi title_txt ve content_txt örnek isimli text alanlarımıza aktarıyorum.
Resim için Loader sınıfı bir değişken yarattım ve bunu addChild metoduyla img_mc örnek isimli movieclip içine ekliyorum sonrasında ise buna resimi load ediyorum.
Kaynak dosyayı buradan indirebilirsiniz. Teşekkürler…

(5 votes, average: 4,80 out of 5)
Ocak 5th, 2010 on 05:45
[...] bir txt dosyasından nasıl veri çekilir onu göstermeye çalışacağım. Aslında daha önce burada xml dosyasından nasıl veri çekilebileceğini kapsamlı olarak anlatmıştım. Mantık aynı [...]
Ocak 11th, 2010 on 09:55
Peki Birden Fazla veriyi nasıl çekeriz
Ocak 11th, 2010 on 16:20
for döngüsü kullanabilirsin.. As2′deki mantıkla aynı..
Ocak 11th, 2010 on 18:01
bir Örnek Yayınlarsanız çok sevinirim
Mart 24th, 2010 on 19:46
Allah ne muradın varsa versin. Geceniz bir yarısı saatlerce uğraştım. Bir tek senin kodun çalıştı. Ellerin dert görmesin. Sayende bu gece uyuyacağım.
Ekim 30th, 2010 on 09:01
çok teşekkürler paylaşımlarınız için gerçekten çok güzel.ben de böyle birşey yaptım.ancak xmlden resimi çektikten sonra boyutlandırma yapamıyorum.x ve y konumunu falan değiştirebiliyorum ancak boyutlandırma olmuyor.bunu nasıl yapabilirim.sizin kodunuza ek olarak
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,tamam)
böyle birşey ekledim.resim yüklenmesi tamamlanınca diye biyerde görmüştüm.ancak orda tanımladığım fonksiyondada boyotlandırma gibi işlemlere izin vermiyor.bu konuda yardımlarınızı bekliyorum şimdiden teşekkürler
Ekim 30th, 2010 on 16:06
İstediğini ancak resim yüklendikten sonra yapabilirsin yani bir fonksiyon daha çalıştırman lazım. Nitekim tamam dediğin fonksiyon içerisinde boyutlandırmayı yapabilirsin.. Bu linkte bir örnek var.. tamam fonksiyonu içerisindeki 150 değeri ile oynadığında resmin büyüyüp küçüldüğünü göreceksin. Değerin altındaki eşitleme orantı için.. kolay gelsin..
Aralık 13th, 2010 on 05:13
Hocam, eline koluna emeğine vaktine sağlık çok işime yaradı 2 gündür araştırıyorum her yerde txt dosyasında yazı çekmek var hiç xml de yazı çeken bulamamıştım allah zarı olsun.
Mayıs 4th, 2011 on 02:57
Merhaba,
Elinize sağlık çok güzel bir anlatım olmuş. Sayenizde yaptığım siteye google’ın xml’inden veri çeken bir güncel hava durumu ekledim.
Ancak flash içinde bunu denediğimde çalışmasına rağmen publish’ten sonra ve server’da çalışmıyor.
Neden olabilir? Yardımlarınızı bekliyorum, teşekkürler…
Mayıs 5th, 2011 on 15:13
İlk söyleyeceğim; dosya yolunu bi kontrol etmen, bir de bu derste anlattığım son sürüm object kodunu kullan bakalım.. sonucu yazarsın.. kolay gelsin..
Mayıs 6th, 2011 on 05:35
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.Event;
import flash.display.Loader;
var req:URLRequest = new URLRequest(“http://www.google.com/ig/api?weather=istanbul&hl=tr”);
var myLoader:URLLoader = new URLLoader();
myLoader.dataFormat = URLLoaderDataFormat.TEXT;
function dataLoaded(evt:Event):void{
try{
var myXML:XML = new XML(evt.target.data);
title_txt.text = myXML.weather.current_conditions.temp_c.@data;
var loader:Loader = new Loader();
img_mc.addChild(loader);
loader.load(new URLRequest(“http://www.google.com.tr/”+myXML.weather.current_conditions.icon.@data));
}
catch (e:TypeError){
trace(“Sayfayı yenileyiniz”);
trace(e.message);
}
}
myLoader.addEventListener(Event.COMPLETE, dataLoaded);
myLoader.load(req);
Kodlarım yukardaki gibi. Bu şekilde ctrl+enter ile flash içinde bakıyorum sorun yok imajı da çekiyor dereceyi de. ancak derleyip de swf’yi açtığımda çalışmıyor yani object kodundan olduğunu zannetmiyorum ki denedim maalesef bişey değişmedi.
başka neden olabilir ki?
şimdiden yardımların için teşekkür ederim.
Mayıs 8th, 2011 on 04:41
Biraz araştırdım. Sorun olarak şu konularla ilgili olabilir; Türkçe kaynak olarak şu adresi bir incele, yabancı kaynak olarak ta şuna bir bak derim.. Twitter dan bilgi çekerken sorun yaşamamıştım ama onun dışında da swf içerisine başka bir domainden veri çekmedim.. Aslında bu konuya yabancıyım.. Vaktim olursa biraz araştıracağım.. Sen de sorunu bulursan yazarsın buraya.. Kolay gelsin..
Mayıs 10th, 2011 on 03:35
yok hocam çıkamadım ben bu işin içinden. flash içinde çalışıyosa dışarda da çalışmalı anlamsız geldi hata da vermiyor zaten.
Mayıs 15th, 2011 on 07:20
Yapabileceğimiz bişey bulabilirseniz haberdar ederseniz çok mutlu olurum…
Haziran 14th, 2011 on 07:28
Hocam çok teşekkür ederim dersleriniz ve örnekleriniz için Allah razı olsun. Benim öğrenmek istediğim, örneğin; menüde 5 kategori var kedi köpük at vb. xml dosyasında da resimleri ve bilgileri var. Menüde kedi kategorisine çıkınca kedi resmi ve bilgileri gelsin istiyorum web sitesi gibi düşününün. bunu nasıl yapabilirim?
Haziran 25th, 2011 on 04:49
Bunu bir kaç şekilde yapabilirsin.. Şöyleki; ya her bir kategori için ayrı xml dosyaların olacak ki o zaman yukarıdaki basit örnekten gidebilirsin yada tek bir xml dosyan olacak oradan her bir menu kategorine flash içerisinde ilgili xml node’a yönlendirme yapacaksın (butona tıklandığında çalışacak).. Bu yönlendirmeyi node sayısını kullanarak ta yapabilirsin yada id ler vererek te yapabilirsin. Eğer kategorilerimi de xml den çekeceğim diyorsan iş biraz daha karmaşıklaşıyor.. Ama her durumda da as3 e hakim olman gerekiyor.. Vaktim olsa bir ders yazacağım ama vakit ayıramıyorum.. Bu dersin 2. kısmına bir göz at istersen.. Tek bir clip kullanarak onu çoğaltacaksan da 3. derse bir göz at.. Bi sorun olursa yardımcı olabilirim.. kolay gelsin..
Mart 18th, 2012 on 07:01
Arkadaşım emeğe değer bi çalışma ve sorunsuz bi çalışma gayet başarılı teşekkür ederim eline sağlık..
websitesinde yazı formatları desteklemiyor olabilir yada klasör yolunu bulamıyodur bunun için tekrar düzenlemek gerekebilir ftp dosya yolunda veya local klasörünün içinde düzenlemiz gerekecek eğer yazıları göremiyosanız