XML の型変換

Flash Player 9 以降、Adobe AIR 1.0 以降

XML オブジェクトと XMLList オブジェクトは、String 値に変換できます。同様に、ストリングを XML オブジェクトまたは XMLList オブジェクトに変換することもできます。また、XML の属性値、名前、テキスト値はすべてストリングです。以降のセクションでは、これらすべてに関する XML 型変換について説明します。

XML および XMLList オブジェクトからストリングへの変換

XML クラスと XMLList クラスには、 toString() メソッドと toXMLString() メソッドがあります。 toXMLString() メソッドは、XML オブジェクトのすべてのタグ、属性、名前空間宣言、および内容を含んだストリングを返します。複合内容(子エレメント)を持つ XML オブジェクトの場合、 toString() メソッドは toXMLString() メソッドとまったく同じように機能します。テキストエレメントだけを含む単純内容の XML オブジェクトの場合、 toString() メソッドは、次の例のように当該エレメントのテキストの内容だけを返します。

var myXML:XML =  
    <order> 
        <item id='1' quantity='2'> 
            <menuName>burger</menuName> 
            <price>3.95</price> 
        </item> 
    <order>; 
 
trace(myXML.item[0].menuName.toXMLString());  
    // <menuName>burger</menuName> 
trace(myXML.item[0].menuName.toString()); 
    // burger

toString() または toXMLString() を指定せずに trace() メソッドを使用すると、次のコードのように、データはデフォルトで toString() メソッドを使用して変換されます。

var myXML:XML =  
    <order> 
        <item id='1' quantity='2'> 
            <menuName>burger</menuName> 
            <price>3.95</price> 
        </item> 
    <order>; 
 
trace(myXML.item[0].menuName);  
    // burger

コードのデバッグ用に trace() メソッドを使用する際は、 toXMLString() メソッドを使用し、より完全な形でデータを出力することがしばしば役立ちます。

ストリングから XML オブジェクトへの変換

次のように new XML() コンストラクターを使用すると、ストリングから XML オブジェクトを作成できます。

var x:XML = new XML("<a>test</a>");

XML として有効でないストリングや、整形式の XML になっていないストリングを XML に変換しようとすると、次のようにランタイムエラーが発生します。

var x:XML = new XML("<a>test"); // throws an error

ストリングから属性値、名前、テキスト値への変換

XML の属性値、名前、テキスト値はすべて String データ型で表現されており、場合によっては他のデータ型に変換する必要があります。例えば、次のコードでは Number() 関数を使用してテキスト値を数値に変換します。

var myXML:XML =  
                        <order> 
                            <item> 
                                <price>3.95</price> 
                            </item> 
                            <item> 
                                <price>1.00</price> 
                            </item> 
                        </order>; 
 
var total:XML = <total>0</total>; 
myXML.appendChild(total); 
 
for each (var item:XML in myXML.item) 
{ 
    myXML.total.children()[0] = Number(myXML.total.children()[0])  
                                                + Number(item.price.children()[0]); 
} 
trace(myXML.total); // 4.95;

このコードで Number() 関数を使用しないとすると、+ 演算子がストリング連結の演算子と解釈され、その結果、最終行にある trace() メソッドの出力は次のようになります。

01.003.95