前の記事で書いたように . や .. オペレータの結果は XMLList オブジェクトになります。この XMLList 内の XML オブジェクトを for 文を使って処理する方法を紹介します。for ... in と for each ... in の2種類のやり方があります。
まず、以下のような XML オブジェクト myOrder を考えます。myOrder.item は2つの item ノードを含む XMLList オブジェクトになります。
var myOrder:XML =
<order>
<item id="1" quantity="1">
<name>fresh burger</name>
<price>300</price>
</item>
<item id="2" quantity="1">
<name>french fries</name>
<price>170</price>
</item>
</order&item>;
for ... in のループを使うと、プロパティ名を使用してイテレーションを行うことができます。プロパティ名といっても XMLList 内の名前で要素名等とは関係ありません。for 文内ではプロパティ名を利用して XMLList から目的の XML オブジェクトにアクセスします。
var total:Number = 0;
for (var pname:String in myOrder.item) {
total += myOrder.item[pname].@quantity
* myOrder.item[pname].price;
}
for each ... in 文では XMLList 内の XML オブジェクトを直接使用できます。上の例と同じ処理を for each 文を使って書き直してみます。
var total:Number = 0;
for each (var prop:XML in myOrder.item) {
total += prop.@quantity
* prop.price;
}
こちらの方がすっきりした感じですね。これに with 文を使用してさらに単純化することもできます。
var total:Number = 0;
for each (var prop:XML in myOrder.item) {
with (prop) {
total += @quantity
* price;
}
}

Leave a comment