XMLList のイテレーション

前の記事で書いたように . や .. オペレータの結果は 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;
  }
}

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261