初めて使うFlashとas3に悪戦苦闘中…。
XMLをパースしてその一件目のタイトルをTextFieldで表示するプログラムを作っていたが、これだけで2日くらいハマったのでメモ。
読み込ませたXMLデータはY!のアップグレード版Web検索APIで「javascript」を検索したもの。
これで回したら、text_field.text = xml.Result[0].Title; の部分にて、そんなプロパティねーよのエラーが発生。
調べたところ、XMLのqName、名前空間に関する問題だということが分かった。こんなの知らなかった…。
要約すると、XMLの一つの文書の中に複数形式のXML文書が混ざった時、タグ名が混同すると面倒なので、そんな時のために接頭辞つけて区別しましょう、と。
それが xmlns (XMLNamespace,名前空間)であり、これがついた場合、子孫のタグがすべてこの名前空間に属することになる。
つまり <Title>
が欲しくても、厳密には
xmlns="urn:yahoo:jp:srch"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
の2つの名前空間に属しているため、<Title>
ではなく、<Title xmlns="urn:yahoo:jp:srch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
という認識をされていたため、「存在しないよ!」と怒られたらしい。
解決策
xmlns:xsi
の方は、
という感じで removeNamespace() メソッドを使うことで、子孫に至るまでの名前空間を取り除くことができる。
だが、xmlns
の方は、これでは取り除くことができないので、この名前空間を デフォルトの名前空間に設定 してしまうことにする。
参考
他の記事で、as3にある qName
クラスを使う方法、デフォルトにせず名前空間を指定する方法、またXML文書中から正規表現でxmlnsまで強引に排除する方法も紹介されているので一番勝手の良い物を使うのが良いかと。
てかアレですね、スパゲティスパゲティしてるとprivateマズかった?とか別の方向に解決方法見出そうとして遠回りしちゃうアレ、なんとかしたいですね(‘A`)