gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

相変わらずのmemo XML変

そも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());
}

いぢょ。