最近はベイスターズ観戦日記と化しております

さぶれの日記
http://flex91.blog19.fc2.com/  presented by さぶれ@

プロフィール


さぶれ@

Author:さぶれ@
Webアプリなんぞ作っている会社に勤めるサラリーマン。自分の技術力のなさを嘆きつつ、日々勉強中。


最近の記事



カテゴリー



月別アーカイブ



スポンサーサイト

--/--/-- --:--|スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

AS3のE4Xについて

2008/06/01 09:12|ActionScript3TB:0CM:0
ActionScript3のXMLクラスはE4X(ECMAScript for XML)に準拠するなど、なかなかリッチなクラスのようです。
E4Xの仕様を中心に、いろいろXMLクラスを使ってみました。
下記のページを参考にしました。というか、ほとんどまんまです。
Core JavaScript 1.5 Guide:Processing XML with E4X

操作対象XML

これから行う操作は、下記のXMLに対して行います。
また、節が変わるごとに、下記のXMLを再セットしてから操作します。
var person:XML = 
<person type="dynamic">
<name>Bob Smith</name>
<likes>
<os>Linux</os>
<browser>Firefox</browser>
<language id="1">JavaScript</language>
<language id="2">Python</language>
</likes>
</person>;
下手に""とかでXMLの値をかこまなくても、直接コードにかけるのが良いですね。

属性の操作

XML要素へのアクセスは、通常のドット演算子+@でアクセスします。
trace(person.@type); //出力結果:dynamic
person.@type="agile";
trace(person.@type); //出力結果:agile

[]の記法もサポートしています。
trace(person["@type"]); //出力結果:dynamic


変数で動的にアクセスすることもできます。
var attribute:String = "@type";
trace(person[attribute]); //出力結果:dynamic

要素の操作

XML要素へのアクセスは、通常のドット演算子以外にも、[]の記法もサポートしています。
trace(person.name); // Bob Smith
trace(person['name']); // Bob Smith
person.name = "Boby";
trace(person.name); // Boby
trace(person['name']); // Boby
trace(person.likes.browser); // Firefox
trace(person['likes'].browser); // Firefox
trace(person['likes']['browser']); // Firefox
person['likes']['browser'] = "IE";
trace(person.likes.browser); // IE

新しい要素の追加

+= 演算子を使うと、指定したノードの下に新しい要素を追加できます。
person.likes.os += <language>C#</language>;
trace(person);
//<person type="dynamic">
// <name>Bob Smith</name>
// <likes>
// <os>Linux</os>
// <language>C#</language>
// <browser>Firefox</browser>
// <language id="1">JavaScript</language>
// <language id="2">Python</language>
// </likes>
//</person>

ただし、下記の操作はエラーになります。
操作対象が複数になってしまうためです。
var person:XML = 
<person type="dynamic">
<name>Bob Smith</name>
<likes>
<os>Linux</os>
</likes>
<likes>
<os>Windows</os>
</likes>
</person>;
person.likes.os += <language>C#</language>;//エラーになる

フィルタ

()演算子を使うと、()内の式にマッチする要素以外をフィルタリングできます。
フィルタリングの戻り値の型は、XMLListです。
操作対象のXMLを変更して試してみました。
var people:XML = <people>
<person>
<name>Bob</name>
<age>32</age>
<weight>80</weight>
</person>
<person>
<name>Joe</name>
<age>46</age>
<weight>64</weight>
</person>
<person>
<name>Mike</name>
<age>12</age>
<weight>32</weight>
</person>
</people>;
var ruslt:XMLList = people.person.(name == "Bob").age;
trace(ruslt); // 46

()内の式には、メソッドを使うこともできます。
var ruslt2:XMLList = people.person.(search(age, weight)).name;
trace(ruslt2);
//<name>Joe</name>
//<name>Mike</name>

疑問点

E4Xって、要素の削除は定義されていないのですかね?

残作業

名前空間については今度調べます。
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

トラックバック
トラックバックURLはこちら
http://flex91.blog19.fc2.com/tb.php/7-655c2d73

Amazon



ブログ内検索



RSSフィード



 |  未分類 | Flex | ActionScript3 | BlazeDS | Silverlight | 読書 | Javascript | Java読書会 | 横浜ベイスターズ | 
Copyright(C) 2008All Rights Reserved. さぶれの日記
Powered by FC2ブログ.  template designed by 遥かなるわらしべ長者への軌跡.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。