忍者ブログ
 >admin |  >entry |  yukku++Blog 
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Yahoo! APIで取得したXMLをXMLオブジェクトにしたのにXML演算子でアクセスしようとしても
値が存在しないとエラーになってしまった。
アクセス方法も間違ってないし、XMLもちゃんと読み込めてるのになぁと調べると
名前空間が指定されている場合はそれも考慮してアクセスする必要があるとのこと。
んで、三つの方法があるようだ。

  1. 名前空間オブジェクト経由(この方法)

  2. default xml namespace でディフォルト名前空間の書き換え

  3. 名前空間の指定(xmlns="hoge")を削除する


1.だと階層が深くなると面倒そう。子の取り出し方次第で工夫できそうだけど。
2.がアクセスが楽になるし、XMLソースに影響与えないから一番使いやすいかな。
3.は強引な手だけど、干渉さえしないなら問題無。ソースの書き換えがどうかはあるけど。
webとの連携で名前空間の処理は必須なことを学べた。
ってかこれに引っかかってぜんぜん進めなかったorz。

// --- 省略 ---
var urn:Namespace = new Namespace('urn:yahoo:jp:auc:search'); // XML中の名前空間オブジェクト作成
_xml = _y.resultSet.urn::Result.urn::Item[0].urn::Title; // 検索結果のタイトル

見ればわかるようにいちいち名前空間経由でアクセスする必要があるので冗長になりがち。

2.の方法
default xml namespace ディレクティブ

default xml namespace = new Namespace('urn:yahoo:jp:auc:search'); // XML中の名前空間オブジェクト作成
_xml = _y.resultSet.urn::Result.urn::Item[0].urn::Title; // 検索結果のタイトル

何故かサンプルのように、Namespaceオブジェクト作ってからやると変数が定義されていないって出る。
何か勘違いしてるかなぁ。とりま今回はおkとしておく。

3.の方法
Remove Annoying XML Namespaces in Flex/AS3

_xml = removeNs(_xml);
public function removeNs(_xml:XML):XML {
var _smlStr:String = _xml.toString().replace(new RegExp("(xmlns|xsi)[^\"]*\"[^\"]*\"", "gi"), "");
return new XML(_smlStr);
}

こんな感じでとにかく xmlns="hoe" とか xsi="hau" を消してしまえばよいだけ。
PR
Comment
Name
Title
Color
Mail
URL
Comment
Passwd   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Track
TB:
[75]  [74]  [73]  [72]  [71]  [70]  [59]  [69]  [68]  [67]  [66
プロフィール
Name :
yukku
カレンダー
05 2024/06 07
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
ブログ内検索
Twitter
Ads
アクセス解析
忍者ブログ [PR]