2007-02-11
AS3XMLLLLLL
全く同じ string から XML 作ろうと思ってもエラーになる。。。広域定数(?)かなんかの影響なんかな。。どこを追えばわかるのかsprd.
TypeError: Error #1034: 強制型変換に失敗しました。XML@6c65521 element を Namespace に変換できません。
mx.rpc.http.HTTPService を呼び出ししてるとエラーるようになるなぁ。
oh?
brazil 3, ACTIONSCRIPT, TEMP ↓えっ同じ社内でこんな感じなの?、ActionScript、fcshを利用してコンパイルを高速化、Flex2 Builderはデフォルトで速い
nani wo itterunn da
re: E4X namespace
http://subtech.g.hatena.ne.jp/cho45/20070211/1171146312
var x:XML = new XML(source);
var aws:Namespace = x.namespace();
default xml namespace = aws;
trace(x.Items);
でできた。あんた最高だよ(ポ)。もしくはワイルドカード使って
var x:XML = new XML(source);
trace(x.*::Items);
でもいける。なるほろー。
AS3 の辞書ファイル
http://rails2u.com/hotchpotch/vim/dict/actionscript3.dict
作ったよ。四文字以上の定数やメソッドやオブジェクトから抽出。まだ全然名前覚えてないから補完できないと typo まくる。。
AS3 の XML オブジェクトと namespace (xmlns)
そもそも AS3 の XML オブジェクトというよりか E4X の話なのかなぁ。ほんの少しだけ解ってきた。AWS の XML は
xml version="1.0" encoding="UTF-8"?>
xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
みたいになっている。んでこの String から XML オブジェクトを作って、x.Items でアイテム要素を取得しようとしても、
var x:XML = new XML(source); // AWS の XML
trace(x.Items); // 空
となってしまう。最初はめっちゃなやんだのだけど、xmlns で namespace を指定しているためにこういう挙動になることが解った。
なので QName を使って XML#descendants() メソッドを使って取得する。
var x:XML = new XML(source);
var ns:Namespace = x.namespace();
var qnItems:QName = new QName(ns, 'Items')
var items:XMLList = x.descendants(qnItems);
trace(items); // ちゃんと取得できる
でもその Items 配下の 要素にアクセスしようとすると
var x:XML = new XML(source);
var ns:Namespace = x.namespace();
var qn:QName = new QName(ns, 'Items')
var items:XMLList = x.descendants(qn);
var qni:QName = new QName(ns, 'Item')
var item:XMLList = items.descendants(qni);
trace(item);
と書くことになって超絶めんどくさい。超適当な解決としては元の String 状態の XML から xmlns を正規表現なりで削除することなんだけどあまりにもダメな解決策くさい。で、XML#removeNamespace() で名前空間を削除したらどうなんだろう、と思ったのだけど
var x:XML = new XML(source);
trace(x.namespaceDeclarations().length); // 1
var ns:Namespace = x.namespace();
x.removeNamespace(ns);
trace(x.namespaceDeclarations().length); // 1
と削除されてないくさい。なんでー。というわけで AWS のような XML にすんなりアクセスする方法を募集中です。