ActionScript には組み込みで XML クラスが存在します。
特徴は、要素をどんどん「.」でつないで取得できる事。
HTML が分かる人なら、ある要素の中にさらに別の要素が含まれるのは分かると思います。
<root>
<age>9</age>
<name>なのはさん</name>
<job>
<type>魔砲少女</type>
<company>一般協力者</company>
</job>
</root>
と、まあありがちなプロフィールを XML にしたとして。
ここから値を取ってきたい場合、 myXml に値が代入されているとして
var _type:String = String(myXml.job.type);
こんな感じ。キャストしてるのは念のため。
見てのとおり、一番上の要素は無視されます。
で、これの集合体が XMLList というオブジェクト。
集合体と言いましたが、正確には『最上位の要素以下に並列した複数の要素を持つ』という意味です。
上の例を変化させるとこんな形。
<root>
<person>
<age>9</age>
<name>なのはちゃん</name>
<job>
<type>魔砲少女</type>
<company>一般協力者</company>
</job>
</person>
<person>
<age>19</age>
<name>なのは様</name>
<job>
<type>管理局の白い魔王</type>
<company>時空管理局</company>
</job>
</person>
</root>
見てのとおり、最上位にあたる root 以下に複数の person 要素が存在しています。
こうした場合のクラスが XML の集合体である XMLList というわけ。
XMLList の要素数(ちなみに length() 『メソッド』で取得可能)が1つなら通常の XML クラスのようにアクセスできるのですが、複数ある場合配列のようにアクセスする事になります。
ここでひとつ注意点があります。
例えば、以下のようなケース。
<root>
<name>東方シリーズ</name>
<works>
<work>
<title>東方靈異伝 〜 Highly Responsive to Prayers</title>
</work>
<work>
<title>東方封魔録 〜 the Story of Eastern Wonderland</title>
</work>
</works>
</root>
めんどくさいので2つでやめにしますが、これの最上位以下は並列な要素ではないので、そのまま取得すると XML クラスです。
ですが、この XML が myXml に代入されているとして、このように値を取得すると話は別。
anotherXml:XML = myXml.works;
これはコンパイルは通る(ちなみに中身が何であろうと XML としてロード可能だったりします…)ものの、実行時にパースエラーになってしまいます。
理由は、 works という要素を最上位とすると、その下には並列に work 要素が並んでいるため。
この場合、XMLList として取得しない限りエラーになってしまいます。
と、いうわけで複数入りうる要素を取得する場合、必ず XMLList を使うべきなようです。
XML がパースできないと言われて、別のところを見て延々1時間は悩んだのですが…
Flash のコンパイラはエラーメッセージが少し不親切だと思います。
Rails が親切すぎるとも言いますが。