カテゴリー
未分類

EX4はまった

今まで独自で拡張したクラスで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].@*;
でもいいです。こっちでくとなんかかっこいい気がする。


コメントにも書いていますが、たとえばattributesをそのまま何かしらのデータに叩き込んで使用したい場合、これまでは
obj.params = node.attributes;(これはではXMLNodeクラス)
みちたいな感じでいけたんですが、E4Xだとname()で戻ってくるのがObjectであるため、toString()でStringに変換してやる必要があります。
(一応上記のXMLを踏襲しています)

こんな感じ?
ちとめんどくさいな・・。
でもXMLDocumentもXMLNodeも推奨じゃないってことはE4Xの方が早いってことなのかいな?

「EX4はまった」への2件の返信

いや、しかしもし何かしらのクラスにattributesをぶち込むときには昔のattributes:Objectの方が楽だったな・・・。
hogehoge.params = node.attributes;
の1行ですんでるじゃん。
っつーかなんかObjectに変換する方法ありそうだな・・。

うぉ・・・Objectに属性名で情報を叩き込もうとしたらエラーになった・・・。name()はObjectを返すから、toString()を通さないとあかんのか・・・。
めんどくさーー・・・。
追記しておこっと。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です