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