当前位置: 首页 > 工具软件 > E4X > 使用案例 >

Flex教程 通过E4X语法遍历XML文档

孙俊彦
2023-12-01

19.2.1 问题

对于一个基于多个字段(attribute)的属性值的XML文件, 应如何选取其中的节点?

19.2.2. 解决办法

使用E4X语法的”@”运算符来存取属性, ([])运算符(数组索引)”是用来指示多个子节点之间的关系, 而”.”运算符则用来表示已命名子节点之间的关系。

19.2.3. 讨论

通过E4X, 你可以在子节点的名称后附加一个”.”运算符, 这样你就可以存取XML文件中特定的子节点。

例如, 从以下的文件中

var xml:XML = <foo>

<bar>Hello World</bar>

</foo>

 

你可以通过以下的方法来存取<bar>的数值:

xml.bar

 

由于<foo>为该XML对象的根节点, 所以无需对其进行引用。

要存取一个文件中节点的属性, 例如:

var xml:XML = <foo>

<bar type="salutation">Hello World</bar>

</foo>

 

可以使用”@”运算符来指定所需的属性值为一个字段:

xml.bar.@type

 

要存取多个名称相同的子节点, 可以使用”[]”运算符。 好像以下的例子:

var xml:XML = <foo>

<bar type="salutation">Hello World</bar>

<bar type="salutation">Hola</bar>

<bar type="salutation">Guten Tag</bar>

</foo>

 

你可以使用以下的方法来存取<bar>系列的第三个对象:

xml.bar[2].@type

 

对于一个用以定义在菜单上项目的简单XML结构, 可以使用如下的代码段:

private var xmlItems: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>

 

private var arr:Array;

 

private function init():void {

    arr = new Array();

    for each(var xml:XML in xmlItems.item) {

        arr.push(Number(xml.@id));

    }

}

要对属性值或节点进行测试的话, 可以使用相等运算符(==):

trace(xmlItems.item.(@id == "2").menuName);

任何符合条件的节点都会被返回, 否则就会被忽略。 以下的例子会把Label组件的text属性设置为一个id等于2itemmenuName:

   

private var xmlItems: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>

 

    private function init():void {

          xmlLabel.text = xmlItems.item.(@id == "2").menuName;

    }

 

    ]]>

    </mx:Script>

<mx:Label id="xmlLabel"/>

 

相等(==)跟不等(!=)运算符两者都可以用来测试一个属性或节点的值, 它们可以为字符串或数字, 所返回的结果为一个布朗值。

 类似资料: