2011年6月27日

E4X的基本使用方法

ActionScript3.0中,以ECMAScript for XML(E4X)形式提供了原生性的XML支援功能。本篇將會介紹E4X的強大搜尋功能,首先我們必須了解XMLXMLList的差別。

XML
XMLList
<catalog>
    <category name="vegetables1">
</category>
    <category name="vegetables2">
</category>
</catalog>
<category name="vegetables1">
</category>
<category name="vegetables2">
</category>


首先查看上圖,XML具有很強的規則性,每個XML格式必須只能有一個根節點(root),但在XMLList中就沒有這個規定,它可以容許多個根節點,因此我們可以說這個XMLList的長度(length)2

為什麼要介紹這個呢!? 那是因為在E4X中我們所要操控的就是XMLList,當然XML格式也是一種XMLListCASE



首先假設我們目標xml文件如下表顯示 :
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
    <category name="vegetables">
        <product name="lettuce"
                 cost="1.95">
            <unit>bag</unit>
            <desc>Cleaned and bagged</desc>
        </product>
        <product name="carrots"
                 cost="2.95">
            <unit>pound</unit>
            <desc>Baby carrots, cleaned and peeled</desc>
        </product>
    </category>
    <category name="fruit">
        <product name="apples"
                 cost="1.95">
            <unit>each</unit>
            <desc>Sweet Fuji</desc>
        </product>
        <berries>
            <product name="raspberries"
                     cost="3.95">
                <unit>pint</unit>
                <desc>Firm and fresh</desc>
            </product>
            <product name="strawberries"
                     cost="2.95">
                <unit>pint</unit>
                <desc>Deep red and juicy</desc>
            </product>
        </berries>
    </category>
</catalog>


在E4X中我們使用點運算子(.)來操作,這點與我們熟悉的(物件.屬性)操作方式雷同。
以下是一些E4X使用的例子。


一些簡單的查詢表達式 :
表達式
結果
category.product
<product name="lettuce"
         cost="1.95">
    <unit>bag</unit>
    <desc>Cleaned and bagged</desc>
</product>
<product name="carrots"
         cost="2.95">
    <unit>pound</unit>
    <desc>Baby carrots, cleaned and peeled</desc>
</product>
<product name="apples"
         cost="1.95">
    <unit>each</unit>
    <desc>Sweet Fuji</desc>
</product>
category.berries.product
<product name="raspberries"
         cost="3.95">
    <unit>pint</unit>
    <desc>Firm and fresh</desc>
</product>
<product name="strawberries"
         cost="2.95">
    <unit>pint</unit>
    <desc>Deep red and juicy</desc>
</product>


比較複雜的查詢 :
條件搜尋,其中@表示搜尋的目標為屬性
category.berries.product.(@cost=="3.95")
<product name="raspberries"
         cost="3.95">
    <unit>pint</unit>
    <desc>Firm and fresh</desc>
</product>


條件搜尋,對子節點進行比對搜尋
category.product.(unit=="bag")
<product name="lettuce" cost="1.95">
  <unit>bag</unit>
  <desc>Cleaned and bagged</desc>
</product>


介紹的這些方法已經可以用在很多的場合囉!!
如果有更好的知識,請觀看的人不吝賜教 :D

沒有留言:

ShareThis