XMLを使ってみる(その1)
ActionScript 3.0ではXMLの扱い方がAS2.0までとはちょっと変わっているようなので、その内容を把握すると同時に、いろいろ勉強し直してみます。
AS3のXML実装
ヘルプによると、ActionScript 2.0のXMLクラスと関連クラスは XMLDocumentという名前に変わり、これは後方互換性を維持するためだけにflash.xmlパッケージに残っている、とのことらしい。
AS3.0的では、E4X(ECMAScript for XML)準拠のクラスとして、XML、XMLList、QName、Namespaceクラスがトップレベルに置かれていますが、最初はXMLと、XMLListだけでいろいろ出来るので、これらからいろいろ試してみたいと思います。
XMLオブジェクトを生成
AS3.0ではXMLリテラルが追加されたので、次のようなコードを書くことが出来ます。
// Example 1A var aXML:XML = <data id='123' color='blue'> <!-- this is a comment --> <number>21</number> <number>22</number> </data>;
これはXMLリテラルであり、文字列ではないことに注意してください。
しかし、文字列からもXMLオブジェクトは生成することが出来るので、次のようなコードも Example 1A と同様のオブジェクトを生成します。
// Example 1B var aXMLString:String = "\ <data id='123' color='blue'>\ <!-- this is a comment -->\ <number>21</number>\ <number>22</number>\ </data>"; var aXML:XML = new XML( aXMLString );
このように様々な方法で作成されたXMLの内容を確認してみたいと思います。
XML.toXMLString() という文字列に変換する便利な関数が用意されていますので、これを試してみます。
上記 Example 1B の aXML を出力したときは次のようになりました。
trace( aXML.toXMLString() ); [trace] <data id="123" color="blue"> [trace] <number>21</number> [trace] <number>22</number> [trace] </data>
出力時のXMLエレメントのアトリビュートがダブルクォーテーション括りになっていることなどから、XMLオブジェクトに渡した文字列をそのまま出力しているのではなく、一度XMLデータとして解釈されたものが整形出力されていることが分かります。
(もう一つXML.toString()という関数があるのですが、XMLの内容を正確に知ることを優先するので、このエントリでは無視します)
XMLオブジェクトにデータを追加してみる
読み込んだXMLデータに、コード側でデータを追加してみる方法は簡単で prependChild/appendChild を使います。
// Example 2 var aXMLString:String = "\ <data id='123' color='blue'>\ <!-- this is a comment -->\ <number>21</number>\ <number>22</number>\ </data>"; var aXML:XML = new XML( aXMLString ); aXML.appendChild( <hoge>APPEND HIP!</hoge> ); aXML.prependChild( <hoge>PREPEND HEAD!</hoge> );
試しに書いた上記コードは以下のように動作します。
trace( aXML.toXMLString() ); [trace] <data id="123" color="blue"> [trace] <hoge>PREPEND HEAD!</hoge> [trace] <number>21</number> [trace] <number>22</number> [trace] <hoge>APPEND HIP!</hoge> [trace] </data>
以上のように新しいインターフェイスを使うと簡単にXMLオブジェクトを構築することが確認できました。
次はこのXMLオブジェクトをいろいろ読み込んだり操作したりするのですが、それは別のエントリでアップします。
(つづく)