そも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()); }
いぢょ。