XML'in güçlü özelliklerinden biri, doğrusal metin karakterleri dizesi yoluyla karmaşık, yuvalanmış veriler sağlama yeteneğidir. Bir XML nesnesine veri yüklediğinizde, ActionScript veriyi ayrıştırır ve verinin hiyerarşik yapısını belleğe gönderir (veya XML verisi düzgün biçimlendirilmemişse bir çalışma zamanı hatası gönderir).
XML ve XMLList nesnelerinin operatörleri ve yöntemleri, XML verilerinde geçiş yapılmasını kolaylaştırır.
Bir XML nesnesinin alt özelliklerine erişmek için, nokta (.) operatörünü ve alt öğe erişimcisi (..) operatörünü kullanın. Şu XML nesnesini göz önünde bulundurun:
var myXML:XML =
<order>
<book ISBN="0942407296">
<title>Baking Extravagant Pastries with Kumquats</title>
<author>
<lastName>Contino</lastName>
<firstName>Chuck</firstName>
</author>
<pageCount>238</pageCount>
</book>
<book ISBN="0865436401">
<title>Emu Care and Breeding</title>
<editor>
<lastName>Case</lastName>
<firstName>Justin</firstName>
</editor>
<pageCount>115</pageCount>
</book>
</order>
myXML.book
nesnesi,
myXML
nesnesinin,
book
adına sahip olan alt özelliklerini içeren bir XMLList nesnesidir. Bunlar,
myXML
nesnesinin iki
book
özelliğiyle eşleşen iki XML nesnesidir.
myXML..lastName
nesnesi,
lastName
adına sahip olan tüm alt öğe özelliklerini içeren bir XMLList nesnesidir. Bunlar,
myXML
nesnesinin iki
lastName
özelliğiyle eşleşen iki XML nesnesidir.
myXML.book.editor.lastName
nesnesi,
myXML
nesnesinin
book
adına sahip alt öğelerinin
editor
adına sahip alt öğelerinin
lastName
adına sahip herhangi bir alt öğesini içeren XMLList nesnesidir: bu durumda, yalnızca bir XML nesnesi içeren bir XMLList nesnesidir ("
Case
" değerine sahip
lastName
özelliği).
Üst ve alt düğümlere erişme
parent()
yöntemi, XML nesnesinin üst öğesini döndürür.
Belirli alt nesnelere erişmek için, bir alt öğe listesinin sıra belirten dizin değerlerini kullanabilirsiniz. Örneğin,
book
adına sahip iki alt özellik içeren bir
myXML
XML nesnesini göz önünde bulundurun.
book
olarak adlandırılan her alt özellik, bununla ilişkilendirilmiş bir dizin sayısına sahiptir:
myXML.book[0]
myXML.book[1]
Belirli bir alt alt öğeye erişmek için, hem alt öğe hem de alt alt öğe adları için dizin sayıları belirtebilirsiniz:
myXML.book[0].title[0]
Ancak,
x.book[0]
öğesinin,
title
başlık adına sahip yalnızca bir alt öğesi varsa, şu şekilde dizin başvurusunu çıkarabilirsiniz:
myXML.book[0].title
Aynı şekilde,
x
nesnesinin yalnızca bir kitap alt öğesi varsa ve bu alt nesne yalnızca bir başlık nesnesine sahipse, şu şekilde her iki dizin başvurusunu çıkarabilirsiniz:
myXML.book.title
Aşağıdaki örnekte gösterildiği gibi, bir değişken veya ifadeyi esas alan adlara sahip alt öğelere gitmek için
child()
yöntemini kullanabilirsiniz:
var myXML:XML =
<order>
<book>
<title>Dictionary</title>
</book>
</order>;
var childName:String = "book";
trace(myXML.child(childName).title) // output: Dictionary
Niteliklere erişme
Aşağıdaki kodda gösterildiği gibi, bir XML veya XMLList nesnesindeki niteliklere erişmek için
@
sembolünü (nitelik tanımlayıcısı operatörü) kullanın:
var employee:XML =
<employee id="6401" code="233">
<lastName>Wu</lastName>
<firstName>Erin</firstName>
</employee>;
trace(employee.@id); // 6401
Aşağıdaki kodda gösterildiği gibi, bir XML veya XMLList nesnesinin tüm niteliklerine erişmek için,
@
sembolüyle birlikte
*
joker karakter sembolünü kullanabilirsiniz:
var employee:XML =
<employee id="6401" code="233">
<lastName>Wu</lastName>
<firstName>Erin</firstName>
</employee>;
trace(employee.@*.toXMLString());
// 6401
// 233
Aşağıdaki kodda olduğu gibi, bir XML veya XMLList nesnesinin belirli bir niteliğine veya tüm niteliklerine erişmek için,
attribute()
ya da
attributes()
yöntemini kullanabilirsiniz:
var employee:XML =
<employee id="6401" code="233">
<lastName>Wu</lastName>
<firstName>Erin</firstName>
</employee>;
trace(employee.attribute("id")); // 6401
trace(employee.attribute("*").toXMLString());
// 6401
// 233
trace(employee.attributes().toXMLString());
// 6401
// 233
Aşağıdaki örnekte gösterildiği gibi, niteliklere erişmek için şu sözdizimini de kullanabildiğinizi unutmayın:
employee.attribute("id")
employee["@id"]
employee.@["id"]
Bunların her biri şuna eşdeğerdir:
employee.@id
. Ancak tercih edilen yaklaşım,
employee.@id
sözdizimidir.
Niteliğe veya öğe değerine göre filtre uygulama
Belirli bir öğe adına veya nitelik değerine sahip öğelere filtre uygulamak için, parantez operatörlerini—
(
ve
)
—kullanabilirsiniz. Şu XML nesnesini göz önünde bulundurun:
var x:XML =
<employeeList>
<employee id="347">
<lastName>Zmed</lastName>
<firstName>Sue</firstName>
<position>Data analyst</position>
</employee>
<employee id="348">
<lastName>McGee</lastName>
<firstName>Chuck</firstName>
<position>Jr. data analyst</position>
</employee>
</employeeList>
Aşağıdaki ifadelerin tümü geçerlidir:
-
x.employee.(lastName == "McGee")
—Bu, ikinci
employee
düğümüdür.
-
x.employee.(lastName == "McGee").firstName
—Bu, ikinci
employee
düğümünün
firstName
özelliğidir.
-
x.employee.(lastName == "McGee").@id
—Bu, ikinci
employee
düğümünün
id
niteliğidir.
-
x.employee.(@id == 347)
—Birinci
employee
düğümü.
-
x.employee.(@id == 347).lastName
—Bu, birinci
employee
düğümünün
lastName
özelliğidir.
-
x.employee.(@id > 300)
—Bu, her iki
employee
özelliğini içeren bir XMLList öğesidir.
-
x.employee.(position.toString().search("analyst") > -1)
—Bu, her iki
position
özelliğini içeren bir XMLList öğesidir.
Var olmayan nitelikler veya öğeleri filtrelemeye çalışırsanız, bir istisna atılır. Örneğin, ikinci
p
öğesinde
id
niteliği bulunmadığından, aşağıdaki kodun son satırı bir hata oluşturur:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
Aynı şekilde, ikinci
p
öğesinin
b
özelliği bulunmadığından, aşağıdaki kodun son satırı bir hata oluşturur:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
Bu hataları önlemek için, aşağıdaki kodda olduğu gibi,
attribute()
ve
elements()
yöntemlerini kullanarak, eşleşen niteliklere veya öğelere sahip özellikleri tanımlayabilirsiniz:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(attribute('id') == '123'));
trace(doc.p.(elements('b') == 'Bob'));
Ayrıca aşağıdaki kodda olduğu gibi,
hasOwnProperty()
yöntemini de kullanabilirsiniz:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(hasOwnProperty('@id') && @id == '123'));
trace(doc.p.(hasOwnProperty('b') && b == 'Bob'));
for..in ve for each..in deyimlerini kullanma
ActionScript 3.0, XMLList nesnelerinin yinelenmesi için
for..in
deyimini ve
for each..in
deyimini içerir. Örneğin, şu
myXML
XML nesnesini ve
myXML.item
XMLList nesnesini göz önünde bulundurun.
myXML.item
XMLList nesnesi, XML nesnesinin iki
item
düğümünü içerir.
var myXML:XML =
<order>
<item id='1' quantity='2'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<item id='2' quantity='2'>
<menuName>fries</menuName>
<price>1.45</price>
</item>
</order>;
for..in
deyimi, bir XMLList öğesindeki özellik adları kümesini yinelemenize olanak sağlar:
var total:Number = 0;
for (var pname:String in myXML.item)
{
total += myXML.item.@quantity[pname] * myXML.item.price[pname];
}
for each..in
deyimi, XMLList öğesindeki özellikleri yinelemenize olanak sağlar:
var total2:Number = 0;
for each (var prop:XML in myXML.item)
{
total2 += prop.@quantity * prop.price;
}
|
|
|