Actionscript:XML’den birden fazla veri çekmek

January 17th, 2008

Şuana kadar görmüş olduğumuz yapı yalnızca XML dökümanından bir veri çekebilmek içindi.Eğer  XML dökümanımızın yapısı

<ad>osman</ad>

<ad>ali</ad>

<ad>Ahmet </ad>

Şeklindeyse yani birden fazla blok varsa ve biz tüm bloklar içerisindeki verilere ulaşmak istiyorsak ne yapmalıyız? Basit bir döngü işimizi kolaylaştracaktır. Döngümüz 0 dan başlamalı ve bitişi XML dökümanı içerisindeki blok sayısı kadar olmalıdır, yani yukarıdaki örnek için 0 dan 3 e kadar bir döngü oluşturmalıyız.XML dökümanındaki blok sayısını öğrenebilmek için

İ = con.childNodes.length - 1;

satırını kullanıyoruz “length” komutu bize kaç adet ana blok olduğu verisini ulaştırmakta bu veriyi döngü içerisinde kullanabilmek için “i” adında bir değişkene atıyorum. Bu uzunluktan 1 çıkartma nedenimiz ise XML dökümanında satır sayılarının 0’dan başlaması eğer lengthi 1 eksiltmezsem döngümüz 1 kere fazladan dönecektir yani işimize yaramayacak fazladan bir verinin bize ulaşmasına neden olacaktır. Sıra döngüyü oluşturmakta, öncelikle 0 değerine sahip “sayi” adında bir değişken oluşturuyoruz, ardından

for (sayi = 0; sayi<=i; sayi++){

}

satırları ile döngümüzü oluşturduk.Şimdi ise döngümüzü kullanarak tüm verileri flash içine çekeceğiz

 

for (sayi = 0; sayi<=i; sayi++){

                               a = con.childNodes[sayi].firstChild;

                               trace(a);

                               }

Tek bir  veri çekerken kullanıdığımız yöntem ile aralarındaki tek fark con.childNodes bölümünün ardından gelen köşeli parantez içerisindeki değer ilkinde “0” iken burada “sayi” olarak kullanmamızdır.”sayi” değeri 0 dan başlayarak XML içerisindeki blok sayısına varana kadar artacağı için her seferinde farklı bir satırdaki veriyi alacaktır, yani

con.childNodes[0].firstChild

con.childNodes[1].firstChild

con.childNodes[2].firstChild

.

.

Şeklinde ilerleyecektir.trace() komutu ise tüm işlem çıktılarını görüntüleyecektir.Böylece actionscript ile XML doküman içerisindeki tüm verileri okutmayı öğrenmiş olduk.

Kodumuzun son hali

con = new XML();

con.ignoreWhite = true;

con.onLoad = function(success) {

                if (success) {

                              

                               i = con.childNodes.length-1;

                               for (sayi = 0; sayi<=i; sayi++){

                               a = con.childNodes[sayi].firstChild;

                               trace(a);

                               }

                              

                               }

                }

con.load(”as.xml”);

Actionscript:Dallanmış XML’den veri çekmek

January 17th, 2008

Peki XML dökümanımız içerisindeki veri

<kisi>

<ad>osman</ad>

</kisi>

 şeklinde olsaydı ne yapacaktık? Gayet basit childNodes ana bloğu temsil eder firstChildler ise onun altındaki blogları temsil eder yani

con.childNodes[0].firstChild.firstChild;

bu satırdaki childNodes <kisi> blogunu temsil ederken firstChild <ad> bloğunu ikinci firstChild ise “Osman ” verisini içermektedir.XML dökümanımızın yapısı ne kadar dallanırsa firstChild yapısıda beraberinde dallanır.

<kisi>

<ad>osman</ad>

<soyad>köycü</soyad>

</kisi>

Gibi bir yapıda ise “köycü” verisine ulaşabilmek için

a = con.childNodes[0].childNodes[1].firstChild;

kod satırı kullanılır, childNodes[0] yine <kisi></kisi> bloğunu temsil eder childNodes[1] ise <soyad></soyad> bloğunu temsil eder. Burada iki tane childNodes kullanmamız nedeni <kisi> bloğu içerisinde birden fazla bloğun (<ad> <soyad>) bulunmasıdır.

Flash: Actionscript ile XML Bağlantı Kurmak

January 17th, 2008

Bilindiği gibi XML veri alışverişini sağlamakta kullanılan standart bir dildir. Flash içerisinde bu standart dili kullanabilmek, verileri çekebilmek, çekilen veriler ile işlem yapabilmek ve bunun gibi birçok işlem için actionscript adı verilen programlama dilini kullanmaktayız. En kolay şekli ile sizlere bir xml-flash bağlatısının nasıl kurulabileceğini anlatacağım.

Öncelikle yeni bir flash dökümanı açıyoruz ardından kod sayfamıza bir XML nesnesi tanımlıyoruz, nesnemizin adı “con” olsun.

con = new XML();

Bu satırın hemen altına XML den çekilecek olan satırlar arasındaki boşlukların, fazlalıkların flash tarafından tanınmamasını sağlamak amacı ile

con.ignoreWhite = true;

satırını ekliyoruz.Ardından XML dökümanına bağlantının yapılıp yapılmadığını öğrenmek amacı ile

con.onLoad = function(success) {

                if (success) {

      }

}

satırlarını ekliyoruz. İlk satırdaki “con.onLoad = function(success)” kod satırı  con XML nesnesinin yüklendiği anda bir kontrol fonksiyonunun çağrılması sağlar fonksiyon bağlantı kurulması durumunda “success” değerini verir.İkinci satırda bulunan if (success) bölümü ise fonksiyondan gelen değere göre işlem yapar, bağlantı fonksiyonu eğer “success ” değeri vermiş ise yani XML dökümana bağlantı kurulmuş ise kendinden sonraki süslü parantezler arasındaki işlemleri gerçekleştirir.Kontrol işlemimizide gerçekleştirdiğimize göre şimdi geldi sıra XML dökümanımızın yerini belirtmeye;

con.load(”as.xml”);

 Bu satırı isterseniz con = new XML(); satırının ardındanda kullanabilirsiniz.Bağlantımızın gerçekleştiğini görselleştirmek için flashtan bir output alabiliriz, yapmanız gereken if (success) { satırından sonra

trace(“bağlandı”);

satırını yazmaktır. Böylece flash bize çıktı olarak “bağlandı ” yazısını verecektir. Actionscript ile XML bağlantısı işlemini tamamlamış bulunmaktayız. Şimdi sıra XML içerisindeki verilerin Flash içerisindeki kullanımında.

“as” adında bir XML doküman oluşturalım ve bu dökümanımız içerisinde “ad” diye bir bloğumuz olsun.

<ad>osman</ad>

Bu XML dökümanımızda bulunan ad bloğunun içerisindeki verilere ulaşmak için yapmamız gereken gayet basit, az önce trace(“bağlandı”); yazdığımız satırın yerine

con.childNodes[0].firstChild;

yazmamız yeterli olacaktır.Bu satırın bize döndüreceği değer “Osman” olacaktır.Bu satırda bulunan childNodes[0] satırı <ad></ad> blogunu temsil etmektedir. [0] diye belirtmemizin sebebi ise ilk satırdaki veriyi çekebilmek içindir. firstChild ise <ad></ad>  bloğunun içerisinde bulunan veriyi temsil eder yani “osman” verisini.