Flex - Проблемы с получением XMLList - PullRequest
0 голосов
/ 14 апреля 2010

У меня проблема с получением XMLList, и я не понимаю, почему.

У меня есть приложение, которое работает правильно.Он использует некоторые данные из двух XML-файлов, которые называются Division.xml и Store.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


Полная структура XMLдля Division.xml и store.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 Ответ

2 голосов
/ 14 апреля 2010

В этой строке кода:

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

Вы ищете атрибут имени узла магазинов. Который не появляется в вашем примере 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>

Насколько я могу судить, у вас нет проблем, которые могут привести к этой ошибке. Вы уверены, что оттуда исходит ошибка, а не какая-то другая строка кода?

...