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”);