如何使用E4X创建包含子属性父项的列表?

时间:2012-04-27 20:55:36

标签: xml actionscript-3 flash e4x

我无法使用E4X获取我想要的结果来挖掘我的XML文档。例如,我想使用下面的XML来查找具有 d_type SW的所有 d_locations ,然后创建包含所有SW d_types的列表代码和 hfloor 号码 - 高于 d_type 的级别。

为了说明这个例子,我想输出一个这样的列表:

TYPE:SW

第18层:SW18.10N

第15层:SW15.W2

第15层:LB12

第15层:LB17

二楼S2:SWS2.3

我怎样才能使用E4X?非常感谢!

Mattynabib

<?xml version="1.0" encoding="UTF-8"?>
<bldg>

<hfloor number="18">
<d_location d_code="SW18.10N" d_type="SW" description="Ferbludgit thingamabob">
        <d_image>3e_pic1</d_image>
    <d_image>3e_pic2</d_image>
        <d_image>3e_pic3</d_image>
        <d_image>3e_pic4</d_image>
        <d_image>3e_pic5</d_image>
        <d_video>3e_vid_1</d_video>
        <d_video>3e_vid_2</d_video>
        <d_video></d_video>
</d_location>
</hfloor>

<hfloor number="15">
<d_location d_code="W1" d_type="PSW" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
</d_location>
<d_location d_code="SW15.W2" d_type="SW" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
</d_location>
<d_location d_code="W3" d_type="LB" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
</d_location>
    <d_location d_code="LB12" d_type="SW" description="Screwed up whosamadingy">
        <d_image>media/lb15_12/LB-12 LOOKING NORTH.png</d_image>
    <d_image>media/lb15_12/LB-12 LOOKING SOUTH.png</d_image>
        <d_image>media/lb15_12/Pages from Level_15_Link_Beam_12.png</d_image>
    <d_image>media/lb15_12/Pages from Level_15_Link_Beam_12-2.png</d_image>
    <d_image>media/lb15_12/Post Demo from CITC018306365-2.png</d_image>
        <d_image>media/lb15_12/Rebuilt from CITC018306365.png</d_image>
    <d_image>media/lb15_12/WEI LB 12 level 15.png</d_image>
        <d_video>Video 1</d_video>
        <d_video>Video 2</d_video>
        <d_video>Video 3</d_video>
</d_location>

<d_location d_code="LB17" d_type="SW" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
</d_location>
<d_location d_code="LB8" d_type="EB" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
</d_location>
<d_location d_code="W14" d_type="CB" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
</d_location>
</hfloor>


<hfloor number="S2">
<d_location d_code="W3" d_type="LB" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
</d_location>
<d_location d_code="SWS2.3" d_type="SW" description="Whacked flogatron">
        <d_image>media/sw_s2_3/CITC000155966.png</d_image>
    <d_image>media/sw_s2_3/CITC000155983.png</d_image>
        <d_image>media/sw_s2_3/CITC000155996.png</d_image>
        <d_image>media/sw_s2_3/CITC000156003.png</d_image>
        <d_image>media/sw_s2_3/Screen shot 2012-04-19 at 5.54.42 PM.png</d_image>
        <d_image>media/sw_s2_3/WEI SWS2.3.png</d_image>
        <d_video>lbs.6e vid</d_video>
        <d_video></d_video>
        <d_video></d_video>
</d_location>
<d_location d_code="LB17" d_type="ES" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
</d_location>
<d_location d_code="LB8" d_type="SW" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
</d_location>
</hfloor>

</bldg>

1 个答案:

答案 0 :(得分:0)

您需要在两个过程中完成。首先收集d_location节点。这将返回XMLList。然后,对于它的每个元素,您会找到父节点,它是包含您想要的楼层代码的h_floor节点。

var xml:XML = <bldg><hfloor number="18">
    <d_location d_code="SW18.10N" d_type="SW" description="Ferbludgit thingamabob">
        <d_image>3e_pic1</d_image>
        <d_image>3e_pic2</d_image>
        <d_image>3e_pic3</d_image>
        <d_image>3e_pic4</d_image>
        <d_image>3e_pic5</d_image>
        <d_video>3e_vid_1</d_video>
        <d_video>3e_vid_2</d_video>
        <d_video></d_video>
    </d_location>
</hfloor>

<hfloor number="15">
    <d_location d_code="W1" d_type="PSW" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
    </d_location>
    <d_location d_code="SW15.W2" d_type="SW" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
    </d_location>
    <d_location d_code="W3" d_type="LB" description="Broken fetzer valve">
            <d_image>3s_pic1</d_image>
    </d_location>
    <d_location d_code="LB12" d_type="SW" description="Screwed up whosamadingy">
        <d_image>media/lb15_12/LB-12 LOOKING NORTH.png</d_image>
        <d_image>media/lb15_12/LB-12 LOOKING SOUTH.png</d_image>
        <d_image>media/lb15_12/Pages from Level_15_Link_Beam_12.png</d_image>
        <d_image>media/lb15_12/Pages from Level_15_Link_Beam_12-2.png</d_image>
        <d_image>media/lb15_12/Post Demo from CITC018306365-2.png</d_image>
        <d_image>media/lb15_12/Rebuilt from CITC018306365.png</d_image>
        <d_image>media/lb15_12/WEI LB 12 level 15.png</d_image>
        <d_video>Video 1</d_video>
        <d_video>Video 2</d_video>
        <d_video>Video 3</d_video>
    </d_location>

    <d_location d_code="LB17" d_type="SW" description="Broken fetzer valve">
            <d_image>3s_pic1</d_image>
    </d_location>

    <d_location d_code="LB8" d_type="EB" description="Broken fetzer valve">
            <d_image>3s_pic1</d_image>
    </d_location>
    <d_location d_code="W14" d_type="CB" description="Broken fetzer valve">
            <d_image>3s_pic1</d_image>
    </d_location>
</hfloor>


<hfloor number="S2">
    <d_location d_code="W3" d_type="LB" description="Broken fetzer valve">
            <d_image>3s_pic1</d_image>
    </d_location>
    <d_location d_code="SWS2.3" d_type="SW" description="Whacked flogatron">
        <d_image>media/sw_s2_3/CITC000155966.png</d_image>
        <d_image>media/sw_s2_3/CITC000155983.png</d_image>
        <d_image>media/sw_s2_3/CITC000155996.png</d_image>
        <d_image>media/sw_s2_3/CITC000156003.png</d_image>
        <d_image>media/sw_s2_3/Screen shot 2012-04-19 at 5.54.42 PM.png</d_image>
        <d_image>media/sw_s2_3/WEI SWS2.3.png</d_image>
        <d_video>lbs.6e vid</d_video>
        <d_video></d_video>
        <d_video></d_video>
    </d_location>
    <d_location d_code="LB17" d_type="ES" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
    </d_location>
    <d_location d_code="LB8" d_type="SW" description="Broken fetzer valve">
        <d_image>3s_pic1</d_image>
    </d_location>
</hfloor>

然后你创建了这个函数,它将完成两个步骤:

function find(type:String) {
    var D_LOCATIONS:XMLList = (xml..d_location.(@d_type==type));
    for each (var loc:XML in D_LOCATIONS) {
        trace("Floor:", loc.parent().@number, loc.@d_code );        
    }
}

称之为

find("SW");