E4X对XML的操作

用于处理 XML 的 E4X 方法

ECMAScript for XML 规范定义了一组用于处理 XML 数据的类和功能。这些类和功能统称为 E4X。ActionScript 3.0 包含以下 E4X 类:XML、XMLList、QName 和 Namespace。

E4X 类的方法、属性和运算符旨在实现以下目标:

  • 简单 ― 在可能的情况下,使用 E4X 可以更容易地编写和理解用于处理 XML 数据的代码。
  • 一致 ― E4X 背后的方法和推理在内部是一致的,并与 ActionScript 的其它部分保持一致。
  • 熟悉 ― 使用众所周知的运算符来处理 XML 数据,如点 (.) 运算符。

注意

 

ActionScript 2.0 中有一个 XML 类。在 ActionScript 3.0 中,此类已重新命名为 XMLDocument,从而避免与作为 E4X 的一部分的 ActionScript 3.0 XML 类冲突。在 ActionScript 3.0 中,flash.xml 包中包含了 XMLDocument、XMLNode、XMLParser 和 XMLTag 几个旧类,主要是用于旧支持。新的 E4X 类是核心类;无需导入包即可使用这些类。本章不详细阐述旧的 ActionScript 2.0 XML 类。有关这些类的详细信息,请参阅《ActionScript 3.0 语言和组件参考》中的 flash.xml 包。

下面是使用 E4X 处理数据的一个示例:

var myXML:XML = 
    <order>
        <item id='1'>
            <menuName>burger</menuName>
            <price>3.95</price>
        </item>
        <item id='2'>
            <menuName>fries</menuName>
            <price>1.45</price>
        </item>
    </order>

通常,应用程序都会从外部源(如 Web 服务或 RSS 供给)加载 XML 数据。不过为清楚起见,本章中的示例是将 XML 数据作为文本来分配的。

如以下代码所示,E4X 包含了一些直观运算符(如点 (.))和属性标识符 (@) 运算符,用于访问 XML 中的属性 (property) 和属性 (attribute):

trace(myXML.item[0].menuName); // 输出:burger
trace(myXML.item.(@id==2).menuName); // 输出:fries
trace(myXML.item.(menuName=="burger").price); // 输出:3.95

使用 appendChild() 方法可为 XML 分配一个新的子节点,如下面的代码片断所示:

var newItem:XML = 
    <item id="3">
        <menuName>medium cola</menuName>
        <price>1.25</price>
    </item>

myXML.appendChild(newItem);

使用 @ . 运算符不仅可以读取数据,还可以分配数据,如下所示:

myXML.item[0].menuName="regular burger";
myXML.item[1].menuName="small fries";
myXML.item[2].menuName="medium cola";

myXML.item.(menuName=="regular burger").@quantity = "2";
myXML.item.(menuName=="small fries").@quantity = "2";
myXML.item.(menuName=="medium cola").@quantity = "2";

使用 for 循环可以循环访问 XML 的节点,如下所示:

var total:Number = 0;
for each (var property:XML in myXML.item)
{
    var q:int = Number(property.@quantity);
    var p:Number = Number(property.price);
    var itemTotal:Number = q * p;
    total += itemTotal;
    trace(q + " " + property.menuName + " $" + itemTotal.toFixed(2))
}
trace("Total: $", total.toFixed(2));

<script type="text/javascript"></script>

 
 
 
   
  Popup

你可能感兴趣的:(JavaScript,xml,Web,Flash,actionscript)