読み込んだXMLデータの扱い方

 XMLというものの存在は知っていたし知識としては十分扱えると思っていたのだが、恥ずかしながら実際に扱うのは初めて。
 ということで、簡単なスクリプトを書いて挙動を確認してみた。
 XMLの読み込み方はさておき、確認したいのは読み込んだデータの扱い方。ということで、XMLデータそのものはスクリプトに直接書き込んだ。

var xml:XML = 
<data>
  <item id='1' type='sweet pastry'>
    <name price="80">あんぱん</name>
    <name price="100">カレーぱん</name>
    <char age="30">Hiko</char>
    <char age="31">Mayu</char>
  </item>
  <item id='2' type='test'>
    <name price="120">食パン</name>
    <char age="4">Kaz</char>
  </item>
</data>



for (var i:int = 0; i < xml.item.length(); i++) {
	for (var k:int = 0; k < xml.item[i].name.length(); k++)	{
		trace("idの値は、" + xml.item[i].@id);
		trace("typeの値は、" + xml.item[i].@type );
		trace("nameの値は、" + xml.item[i].name[k] );
		trace("priceの値は、" + xml.item[i].name[k].@price );
		trace("\n");
	}
	for (k = 0; k < xml.item[i].char.length(); k++)	{
		trace("idの値は、" + xml.item[i].@id);
		trace("typeの値は、" + xml.item[i].@type );
		trace("charの値は、" + xml.item[i].char[k] );
		trace("ageの値は、" + xml.item[i].char[k].@age );
		trace("\n");
	}
	trace("----------");
}

 出力結果は下記の通り。

idの値は、1
typeの値は、sweet pastry
nameの値は、あんぱん
priceの値は、80


idの値は、1
typeの値は、sweet pastry
nameの値は、カレーぱん
priceの値は、100


idの値は、1
typeの値は、sweet pastry
charの値は、Hiko
ageの値は、30


idの値は、1
typeの値は、sweet pastry
charの値は、Mayu
ageの値は、31

                  • -

idの値は、2
typeの値は、test
nameの値は、食パン
priceの値は、120


idの値は、2
typeの値は、test
charの値は、Kaz
ageの値は、4

                  • -

 なるほどなー。
 同名の子要素が複数ある場合はfor文で繰り返し読み出してやればいいらしい。forを使わずにいきなり読み出しに行くと、同名の要素がタグ付きで取得できる。

例:
xml.item[i].name」と指定して取得できるものは下記の通り

あんぱん
カレーぱん

 そして子要素を読み出している最中も、(当然だが)親要素の値も参照できる、と。