そもXML嫌いだしとかいう話はおいといて。
あるXML文字列があると仮定すると。
それは例えば
var x1:XML =
にぶち込めば、とりあえず入る。
で。ここから「複数要素」を切り出す場合。
var x_list:XMLList = x1.elements("エレメント名");でゲトれる。*とか使えるのがある意味素敵。
で…このXMLListをどう紐解くかってぇと
for (var i:int = 0; i < x_list.length(); ++i) {
var mono_item:XML = x_list[i];
}でぶん回しつつゲトる。確かにXMLの配列だから受け口はXMLクラスだねぇ…面倒だけど。
で…最終的に、エレメントの要素がタグ無しの値だけの時は、やっぱりelementsメソッドでいける。
で…アトリビュートをとりたければ attribute() メソッド。
これで…構造が明確なのは、一式いけると思う。
不明瞭なのは、とりあえず*でぶち込んでから以下略、って感じかしらん。
以下、実験したコード。
var x1:XML =
<order>
<!-- これはコメントです -->
<?PROC_INSTR sample ?>
<item id='1'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<item id='2'>
<menuName>fries</menuName>
<price>1.45</price>
</item>
</order>
trace(" -- 1");
trace( x1.elements("*")[0].toString() );
trace(" -- 1");
trace( x1.elements("item")[0].elements("menuName")[0].toString() );
trace(" -- 1");
trace( x1.elements("item")[0].elements("price")[0].toString() );
trace(" -- 1");
trace( x1.elements("*")[1].toString() );
trace(" -- 1");
//trace( x1.elements("foo")[0].toString() ); 未定義はエラー。どう拾う?
//trace(" -- 1");
var xitem:XMLList = x1.elements("item");
trace(" -- 2");
trace( xitem[0].toString() );
for (var i:int = 0; i < xitem.length(); ++i) {
trace(" -- 2-1");
var mono_item:XML = xitem[i];
trace(mono_item.elements("menuName"));
trace(mono_item.elements("price"));
}
var xitem:XMLList = x1.elements("*");
for (var i:int = 0; i < xitem.length(); ++i) {
trace(" -- 3-1");
var mono_item:XML = xitem[i];
trace(mono_item.toString());
}いぢょ。