Flex - Проблемы с получением XMLList

У меня проблема с получением 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

подразделение.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>

person BS_C3    schedule 14.04.2010    source источник


Ответы (1)


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

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

вы ищете атрибут имени узла магазинов. Чего нет в вашем примере XML. Скорее всего, вы фильтруете все свои результаты еще до того, как перейдете в дочерний узел магазина.

Если это не ваша проблема, опубликуйте более надежный пример вашей xml-переменной storeData.


Я скопировал / вставил и почти не изменил ваш запрос 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>

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

person invertedSpear    schedule 14.04.2010
comment
Ой, извини! Я редактировал xml... Но дело не в этом =) Я редактировал xml. С Уважением - person BS_C3; 14.04.2010
comment
Привет! Я почти уверен, что проблема исходит из этой строки; когда я удаляю строку, ошибки нет... Меня беспокоит то, что я не вижу никаких проблем с этой строкой... И та же самая строка с DivisionData.division.(@name==Japan) .stores.store. (odeis == 031) действительно работает !! ›_‹ Я даже перезагрузил компьютер, почистил кеш, почистил проект, перезапустил сервер... Я правда не знаю, что еще делать... -_-' - person BS_C3; 15.04.2010
comment
ОК, я еще немного покопался и нашел это: flex.gunua.com/?p=127 в основном это говорит о том, что если атрибут, по которому вы фильтруете, находится не во всех узлах, он выдает эту ошибку. НО вы не используете атрибуты, а odeis является дочерним во всех ваших узлах магазина ... возможно, это ошибка, которую вы можете исправить с Adobe - person invertedSpear; 15.04.2010
comment
Привет! После перезапуска Flex Builder и моего компьютера... Это просто чудесным образом заработало... Так что с самого начала не было никакой ошибки, но что-то осталось где-то в проекте... ?? Большое спасибо за ваше время и ваши ответы invertedSpear. - person BS_C3; 15.04.2010
comment
Как любит говорить мой коллега. Flex Builder — патологический лжец. Иногда вам просто нужно знать получше :) - person invertedSpear; 15.04.2010