今まで独自で拡張したXMLクラスでXMLの処理をしていたのだけど、まぁ世の中の時流にのってみようと思い、E4X(PDF)に手を出してみた。
で、はまった。
たとえば
こんなXMLを読み込んだとしてitemノードのattributes名が不確定の場合、これまではこのノードのattributes(Object)を取得してfor in でぶん回せば属性名と属性値を取得できたのだけど、E4Xで取得したXMLListだとちと違う。
たとえば
これだと
っツー感じ。つまりObjectではなくなんちゃってArray(lengthも使えるのだけど、プロパティでは無くmethodになってる)
ということで名前は”name”でList内に格納されているのだけど、これがまた何故かmethod(いや、XMLを走査するわけだから何故かでもないんだけど・・。)
ということで正解は
で疑問なのはこのやり方は早いのか?っツーことぐらいかな・・・。
Objectに一度変換してとり回しした方が早いようなきもするけどAVM2だと関係ないのか?
(setter使ったって実質内部でmethodな訳だし変わらない?)
なんかこれやるんだったら、value()とかのメソッドがあるとオデの頭では理解しやすいのだけど、まぁノードも属性も一括で管理しているから、その辺でのつじつまなんだろうな・・。
まぁこれまで使ってきたものとあまりに使い勝手が違うのでまだ違和感あるけど、
ノード名、属性名などがきちんと分かっている情報に対してのアクセスはとても簡単。
判定条件を内包できるもの素敵です。
最近JSONばっかりで、久しぶりにXMLを触ってはまったっつーことで、とりあえずメモ。
あ、ちなみに
var _attr = myXML.item[0].attributes();
は
var _attr = myXML.item[0].@*;
でもいいです。こっちで書くとなんかかっこいい気がする。