ホーム >> 左脳Script >> Adobe Flash >> Action Script >> XML フィルターについて

XML フィルターについて


E4X(ECMAScript for XML) による XML のフィルタリングについてのメモ。


基本的使用法

以下のような XML データ foo があるとします。

var foo:XML = <words>
    <word level="13">ひでぶ</word>
    <word level="5">まにょまにょ</word>
    <word level="15">いんたーねっつ</word>
    <word level="8">げろしゃぶ</word>
    <word level="3">ツンタカーメン</word>
    <word level="12">いかゾルゲ</word>
    <word level="20">あぼ</word>
    <word level="1">シュミレート</word>
</words>;

  • 属性level が10以上のものを列挙
    属性を指定し、条件を満たすものを列挙した XMLList を返す。
    
    trace(  (foo.word.(@level>=10)) );
    
    結果。
    
    <word level="13">ひでぶ</word>
    <word level="15">いんたーねっつ</word>
    <word level="12">いかゾルゲ</word>
    <word level="20">あぼ</word>
    

  • 属性level が10以上15未満のものを列挙
    条件は真偽を返す式であれば、どんな形でも良い。
    
    trace(  (foo.word.(@level>=10 && @level<15))    );
    
    結果。
    
    <word level="13">ひでぶ</word>
    <word level="15">いんたーねっつ</word>
    


問題と解決策

ここでもし、foo にこのような物が含まれていると、問題が発生します。

    <word deleted="1"/>
フィルター処理を実行すると、このようなエラーが出ます。
[Fault] exception, information=ReferenceError: Error #1065: 変数 @level は定義されていません。

フィルター処理では、存在しない属性にアクセスするとエラーを起こしますが、これは「hasOwnProperty」で回避できます。
条件式の最初に「hasOwnProperty("@属性名")」を追加するだけです。

trace(  (foo.word.(hasOwnProperty("@level") && @level>=10)) );

これで、「属性levelを持ち、levelが10以上のもの」を列挙出来るようになりました。




トラックバック(0)

トラックバックURL: http://n-yagi.0r2.net/sanoupulurun/mt-tb.cgi/251

コメントする

ホーム >> 左脳Script >> Adobe Flash >> Action Script >> XML フィルターについて

アーカイブ

このブログ記事について

このページは、n-yagiが2010年1月17日 20:03に書いたブログ記事です。

ひとつ前のブログ記事は「flex3 における Tree での dataProvider の扱い方」です。

次のブログ記事は「配列の添え字についての検証」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。