サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

@属性識別演算子

ID: FN1009001 Platform: All Version: CS3/ActionScript 3.0 Runtime: Flash Player 9/AIR 1.0

rawDataプロパティ
文法 xmlObject.@attributeName
xmlObject.["@" + attributeName]
xmlObject.@[attributeName]
パラメータ attributeName:* - 属性名。

説明
XMLもしくはXMLListオブジェクトに対して、XMLデータの属性(アトリビュート)を指定します。@演算子の後に属性名を書添えます。配列アクセス演算子[]を用いるときは、属性名は文字列で加えます。したがって、属性名の文字列を変数に入れて指定できます。なお[ヘルプ]では、配列アクセス演算子を使わない記述が推奨されています[*1]

すべての属性名のXMLListオブジェクトを得るには、ワイルドカードを添えた@*が指定できます[*2]

属性名が予約語の場合には、配列アクセス演算子を使わず@演算子に続けて属性名を添える書き方ではエラーになります(図001)。このようなときは、配列アクセス演算子[]を使って属性名は文字列で指定します。また、XML.attribute()メソッドを使えば、予約語の属性を文字列で引数に渡して値が得られます。

図001■予約語を@属性名のシンタックスで指定するとエラーになる
implicitImports.xml

[*1] Flash Professional CS5の[ActionScript 3.0リファレンスガイド]の[演算子]のページで「@ attribute identifier演算子」の項には、つぎのように説明されています。

属性にアクセスするには、myXML.attribute("id")、myXML["@id"]、およびmyXML.@["id"]シンタックスを使用することもできます。シンタックスmyXML.@idを推奨します。

[*2] 前出注[*1]の[ヘルプ]の説明には、「@*」が「@~~」と誤って記載されています(「Flash Professional CS5ヘルプ正誤表」参照)。


つぎのスクリプトは、3行のtrace()関数が属性suiteの値としていずれも「Web」を[出力]パネルに表示します。

var flash_xml:XML = <product suite="Web">
    <name>Flash</name>
    <price>699</price>
  </product>
trace(flash_xml.@suite);   // 出力: Web
trace(flash_xml["@suite"]);   // 出力: Web
trace(flash_xml.@["suite"]);   // 出力: Web

()演算子と組合わせれば、指定した属性値に当てはまるXMLListオブジェクトが得られます[*3]。以下のスクリプトは、XMLデータからsuite属性が"Web"のproductノードを取出し、[出力]パネルにつぎのように表示します。

<product suite="Web">
  <name>Flash</name>
  <price>699</price>
</product>
<product suite="Web">
  <name>Dreamweaver</name>
  <price>399</price>
</product>

var cs3_xml:XML = <cs3>
  <product suite="Web">
    <name>Flash</name>
    <price>699</price>
  </product>
  <product suite="Web">
    <name>Dreamweaver</name>
    <price>399</price>
  </product>
  <product suite="Design">
    <name>Photoshop</name>
    <price>649</price>
  </product>
  <product suite="Design">
    <name>Illustrator</name>
    <price>599</price>
  </product>
</cs3>;
var products:XMLList = cs3_xml.product;
var webProducts:XMLList = products.(@suite == "Web");
trace(webProducts);

[*3] 予約語を属性名として指定したいときには、配列アクセス演算子[]を使って文字列で記述します。

var as3_xml:XML = <as3>
  <method class="XML">
    attribute()
  </method>
  <method class="XMLList">
    attribute()
  </method>
</as3>;
var method:XMLList = as3_xml.method.(@["class"] == "XML");
trace(method);   // 出力: attribute()

参考
[ActionScript 3.0リファレンスガイド] > [演算子]「@ attribute identifier演算子

関連項目
[XMLの操作]

_____

作成者: 野中文雄
作成日: 2010年9月15日


Copyright © 2001-2010 Fumio Nonaka.  All rights reserved.