![]()
XML のノード名が ActionScript 予約語とバッティングした時の対処法(AS2 & AS3)
Flash(ActionScript) にて XML を操作する上での留意点。XML のノード名によっては予期せぬ現象が起こりえますよというエントリです。
「リクルートWEBサービス」を使う上でも注意しておく必要があるかと思います。
ActionScript 2.0 & CASA Framework の場合
Flash(ActionScript2.0)にて「リクルートWEBサービス」を使う上での留意点。
CASA Framework の XmlLoad & Xmlutil でのロード&パース処理において、ロードしたXMLの中に「name」や「catch」といった、AS の予約語と同様のノード名があった場合、以下のように:
hogeI[0].catch[0].nodeValue
だとコンパイルエラーが出ます。ドットでのアクセスでは XML ノード名が AS とバッティングするのが原因。
こういった場合の対応は:
hoge[0]["catch"][0].nodeValue
とリスト(僕は配列カッコって呼んでますが)でアクセスするとOKです。
ActionScript 3.0 & E4X の場合
ActionScript 3.0 では標準機能として E4X による XML データへのアクセスが導入されたので、CASA と同じ使用感で(まぁこちらが本家ですが)XML 処理が可能です。
が、こちらも同様に「catch」など一部のノード名が AS とバッティングする現象が発生します。こちらの対処法(+リクルートWEBサービス使用の際にも留意すべき XML 名前空間への対応)は:
にて丁寧に解説してくださっています。上記記事を参考にさせていただいて AS3 で リクルートWEBサービスの XML をロード&パースしている解説動画を作りましたので、よかったら見てください。
AS2 ではノード名「name」でエラーで、一方 AS3 だと大丈夫だったり、どの名前がバッティングするかは多少違いがあるようですが、「catch(キャッチコピー)」ノード、「name(名前)」ノード等は、多くのWebサービスでも使用されているノード名だと思いますので、何か予期せぬ現象に出くわしたら、ふと思い出してください。
