XML 类型转换

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

可以将 XML 对象和 XMLList 对象转换为字符串值。同样,也可以将字符串转换为 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

如果使用 trace() 方法但不指定 toString()toXMLString(),则默认情况下将使用 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() 方法,以便 trace() 方法输出更完整的数据。

将字符串转换为 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