ActionScript3.0でXML:その0.XMLの基本的な使い方

>>Flaファイルをダウンロード

ActionScript3.0のXMLの取り扱い その1.」の方を先に書いたあとで、そういえば、この話のさらに前提となる部分を多く省いてたなぁという事で、その辺を解説します。

//テスト用XMLデータ
var test_xml:XML =
<houkagoTeaTime>
    <member part="Guitar">
        <name>平沢 唯</name>
    </member>
    <member part="Bass">
        <name>秋山 澪</name>
    </member>
    <member part="Keyboard">
        <name>琴吹 紬</name>
    </member>
    <member part="Dram">
        <name>田井中 律</name>
    </member>
</houkagoTeaTime>;

こんなXMLデータを用意したとします。

そもそもAS3.0でXMLデータを扱う場合は

  1. XMLクラス
  2. XMLListクラス

を使います。

これらの違いは、詳しくはこちらのリンクにまかせるとして、簡単に説明すると。
XMLのタグで表わされる部分を、ノードだとかエレメントだとか呼んだりしますが、XMLクラスは、必ず一つのXMLエレメントで構成されている必要があります。

なので、複数のエレメントを同じレベルに並べることができません。

上記サンプルの例では、test_xmlは「<houkagoTeaTime>」という単一のエレメントで構成されています。

XMLListクラスは、複数のエレメントを扱います。
例えば

var testData:String =
<member part="Guitar">
    <name>平沢 唯</name>
</member>;

testData += <member part="Bass">
    <name>秋山 澪</name>
</member>;

testData += <member part="Keyboard">
    <name>琴吹 紬</name>
</member>;

testData += <member part="Dram">
    <name>田井中 律</name>
</member>;

こんなコードがあったとして、
testDataの値は

<member part="Guitar">
  <name>平沢 唯</name>
</member>
<member part="Bass">
  <name>秋山 澪</name>
</member>
<member part="Keyboard">
  <name>琴吹 紬</name>
</member>
<member part="Dram">
  <name>田井中 律</name>
</member>

このように、複数の「<member>」というエレメントで構成されたXML表現になります。
このString型の変数をXMLデータとして扱う場合。

var test_xml:XML = new XML(testData);

だと、コンパイルエラーになりますが

var test_xml:XMLList = new XMLList(testData);

という風に、XMLListクラスを利用すると、コンパイルエラーにはなりません。
ただし、複数のエレメントを持ったXMLListオブジェクトは、XMLクラスのメソッドを使う事が出来ないので、使いどころとしては、プログラム上で生成したXMLエレメントの一時作業用に、XMLListクラスを利用し、生成されたXMLListを、XMLクラスのオブジェクトと連結する。といったイメージでしょうか。

なので、基本的にはXMLクラスのオブジェクトに対して処理をします。

あとはエレメントの抽出方法ですが、
サンプルのXMLデータから値を抽出する場合の例をいくつか。

trace(test_xml.member);

の出力結果、すべての<member>エレメントを取得します。
<member part="Guitar">
  <name>平沢 唯</name>
</member>
<member part="Bass">
  <name>秋山 澪</name>
</member>
<member part="Keyboard">
  <name>琴吹 紬</name>
</member>
<member part="Dram">
  <name>田井中 律</name>
</member>

trace(test_xml.member.name);

の出力結果、すべての<member>の<name>エレメントを取得します。
<name>平沢 唯</name>
<name>秋山 澪</name>
<name>琴吹 紬</name>
<name>田井中 律</name>

trace(test_xml.member[0]);

の出力結果、指定したindexのエレメントを取得します。
<member part="Guitar">
  <name>平沢 唯</name>
</member>

trace(test_xml.member[0].name);

の出力結果、指定したindexのエレメントを取得します。
平沢 唯

trace(test_xml.member.@part);

属性を取得する場合、@を付けます。出力結果は
GuitarBassKeyboardDram

trace(test_xml.member[0].@part);

もちろんindexを指定することもできます。

trace(test_xml.member.(@part == "Dram") );

条件抽出する場合は上記のように記述。
出力結果は
<member part="Dram">
  <name>田井中 律</name>
</member>

trace(test_xml.member.(name == "秋山 澪") );

エレメントの値に対しても条件抽出できます。
出力結果は
<member part="Bass">
  <name>秋山 澪</name>
</member>

以上が、ActionScript3.0でXMLを扱う際の、ほんとのほんとに基礎部分です。
以下、用語紹介です。(Flashのヘルプから引用)

  • エレメント : XML ドキュメント内の単一アイテム。開始タグと終了タグ (タグも含みます) の間にあるコンテンツにより識別されます。 XML エレメントには、テキストデータ、その他のエレメントを含めることができます。また、空であってもかまいません。

  • 空のエレメント : 子エレメントを含まない XML エレメント。 空のエレメントは、自己終了タグ(<element/> など)として記述されることがよくあります。

  • ドキュメント : 単一の XML 構造。 XML ドキュメントには、任意の数のエレメントを含めることができます (また、単一の空のエレメントのみで構成することもできます)。ただし、XML ドキュメントには、ドキュメント内の他のすべてのエレメントを含む単一の最上位エレメントが存在する必要があります。

  • ノード : XML エレメントの別名。

  • 属性:エレメント内部にネストする個別の子エレメントとしてではなく、attributename="value" の形式でエレメントの開始タグに記述されるエレメントに関連する名前付き値。

コメントする

トラックバック(0)

このブログ記事を参照しているブログ一覧: ActionScript3.0でXML:その0.XMLの基本的な使い方

このブログ記事に対するトラックバックURL: http://studio-ensyu.sakura.ne.jp/mt/mt-tb.cgi/23