Не понимаю это поведение E4X - PullRequest
0 голосов
/ 18 апреля 2011

Я пытаюсь получить значение свойства определенного узла, но его поведение ошарашено.

У меня есть этот XML в поставщике данных:

<items>
    <item>
        <code>ITEM1</code>
        <groups>
            <group>
                <code>GROUP1</code>
                <props>
                    <prop>
                        <code>PROP1</code>
                    </prop>
                    <prop>
                        <code>PROP2</code>
                    </prop>
                </props>
            </group>
        </groups>
    </item>
    <!-- Lots more items, each item has a variable number of groups and props -->
</items>

Теперь этот код:

var itemData:XMLList = dataProvider..elements("item").(code == "ITEM1");

успешно возвращает 1-е <item>.

Далее я делаю:

var groupData:XMLList = itemData..elements("group").(code == "GROUP1")

Но это не работает. groupData.length() == 0

Если я уроню elements(), то это сработает:

var groupData:XMLList = itemData..group.(code == "GROUP1")

Но мне нужно использовать elements (), потому что имена элементов потенциально настраиваются.

Итак, вопрос в том, почему первый оператор работает, но использование того же оператора для данных, возвращенных первым оператором, не работает должным образом?

Любая помощь приветствуется. Заранее спасибо.

1 Ответ

1 голос
/ 18 апреля 2011

Поскольку group является внутренним элементом groups , а не прямым потомком item , а второе выражение работает из-за рекурсивного характера

Попробуйте следующий код

var itemData:XMLList = xml..elements("item").(code == "ITEM1"); 
//Alert.show(itemData.toXMLString());
var groupsData:XMLList = itemData..elements("groups");              
//Alert.show(groupsData.toXMLString());
var groupData:XMLList = groupsData..elements("group").(code == "GROUP1")
//Alert.show(groupData.toXMLString());

. Вы можете включить Altert, чтобы увидеть результат выражения

РЕДАКТИРОВАНИЕ Подробности для функции элемента можно найти в AS3 XML elements ()

надеется, что поможет

...