Flex - 检索XMLList的问题

时间:2010-04-14 16:20:47

标签: flex xmllist

我在检索XMLList时遇到问题,我不明白为什么。

我有一个正常运行的应用程序。它使用两个名为division.xml和store.xml的xml文件中的一些数据。 我注意到我在division.xml中有一些应该在store.xml中的数据,所以我将数据从一个文件复制/粘贴到另一个文件。 这是我复制的数据:

<stores name="Japan" division="C300">   
    <store>
        <odeis>101</odeis>
        <name></name>
        <password></password>
        <currency></currency>
        <currSymbol></currSymbol>
    </store>    
    <store>
        <odeis>102</odeis>
        <name></name>
        <password></password>
        <currency></currency>
        <currSymbol></currSymbol>
    </store>
</stores>

在应用程序中,我列出了所有odeis代码,我需要检索与所选odeis代码对应的块存储。

在将数据移动到store.xml之前,这就是我检索块的方法:

var node:XMLList = divisionData.division.(@name==HomePageData.instance.divisionName).stores.store.(odeis == HomePageData.instance.storeCodeOdeis)

这是我在将数据复制到store.xml后检索它的方法:

var node:XMLList = storeData.stores.(@name==HomePageData.instance.divisionName).store.(odeis == HomePageData.instance.storeCodeOdeis)

我目前收到以下错误:

ReferenceError: Error #1065: The variable odeis is not defined.

有人能开导我吗?因为我真的不知道为什么它不起作用......

感谢您提供的任何提示。

此致 BS_C3


为division.xml和store.xml完成​​xml结构

division.xml:

<data>
    <division name="Europe">
    </division>
    <division name="Japan">
        <stores>
            <store> 
                <odeis>101</odeis>
                <name> </name>
                <password></password>
                <currency></currency>
                <currSymbol></currSymbol>
            </store>
            <store>
                <odeis>031</odeis>
                <name></name>
                <password></password>
                <currency></currency>
                <currSymbol></currSymbol>
            </store>
            <store>
                <odeis>032</odeis>
                <name></name>
                <password></password>
                <currency></currency>
                <currSymbol></currSymbol>
            </store>
        </stores> 
        <fingerSize>
            .
            .
            . 
        </fingerSize>
        <clarities> 
            .
            .
            .
        </clarities>
        <colors>
            .
            .
            .
        </colors>
    </division> 
</data>

store.xml:

<data>
    <stores name="Europe" division="C100">
        <store>
            <odeis></odeis>
            <name></name>
            <password></password>
            <currency></currency>
            <currSymbol></currSymbol>
        </store>  
        <store>
            <odeis></odeis>
            <name></name>
            <password></password>
            <currency></currency>
            <currSymbol></currSymbol>
        </store>
        <store>
            <odeis></odeis>
            <name></name>
            <password></password>
            <currency></currency>
            <currSymbol></currSymbol>
        </store> 
    </stores>
    <stores name="Japan" division="C300">   
        <store>
            <odeis>101</odeis>
            <name></name>
            <password></password>
            <currency></currency>
            <currSymbol></currSymbol>
        </store>
        <store>
            <odeis>031</odeis>
            <name></name>
            <password></password>
            <currency></currency>
            <currSymbol></currSymbol>
        </store>
        <store>
            <odeis>032</odeis>
            <name></name>
            <password></password>
            <currency></currency>
            <currSymbol></currSymbol>
        </store>
    </stores>
</data>

1 个答案:

答案 0 :(得分:2)

在这行代码中:

var node:XMLList = storeData.stores.(@name==HomePageData.instance.divisionName).store.(odeis == HomePageData.instance.storeCodeOdeis)

您正在寻找商店节点的name属性。这不会出现在您的XML示例中。在进入商店子节点之前,您可能会过滤掉所有结果。

如果这不是您的问题,请发布一个更强大的storeData xml变量示例。


我复制/粘贴并且对您的E4X查询几乎没有任何更改,并且没有任何问题。运行得很好:

<?xml version="1.0"?>
<!-- Simple example to demonstrate the ComboBox control. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
    <mx:Script>
        <![CDATA[
            public var storeData:XML = new XML(
                <data>
                    <stores name="Europe" division="C100">
                        <store>
                            <odeis></odeis>
                            <name></name>
                            <password></password>
                            <currency></currency>
                            <currSymbol></currSymbol>
                        </store>  
                        <store>
                            <odeis></odeis>
                            <name></name>
                            <password></password>
                            <currency></currency>
                            <currSymbol></currSymbol>
                        </store>
                        <store>
                            <odeis></odeis>
                            <name></name>
                            <password></password>
                            <currency></currency>
                            <currSymbol></currSymbol>
                        </store> 
                    </stores>
                    <stores name="Japan" division="C300">   
                        <store>
                            <odeis>101</odeis>
                            <name></name>
                            <password></password>
                            <currency></currency>
                            <currSymbol></currSymbol>
                        </store>
                        <store>
                            <odeis>031</odeis>
                            <name></name>
                            <password></password>
                            <currency></currency>
                            <currSymbol></currSymbol>
                        </store>
                        <store>
                            <odeis>032</odeis>
                            <name></name>
                            <password></password>
                            <currency></currency>
                            <currSymbol></currSymbol>
                        </store>
                    </stores>
                </data>
            );

            public function init():void{
                trace(storeData.stores.(@name=="Japan").store.(odeis == "031"));    
            }           

        ]]>
    </mx:Script>
</mx:Application>

据我所知,你没有任何问题导致该错误。你确定错误来自那里而不是其他一些代码吗?

相关问题