Как создать переменные пути с помощью e4X?

Мне нужно знать, как разобрать путь к переменной в Flex 3 и e4X. Например, у меня есть две строки XML, единственное различие в которых - имя одного элемента.

<NameOfRoot>
    <NameOfChild1>
        <data>1</data>
    </NameOfChild1>
</NameOfRoot>

<NameOfRoot>
    <NameOfChild2>
        <data>2</data>
    </NameOfChild2>
</NameOfRoot>

В настоящее время я обращаюсь к таким переменным:

var data1:String = NameOfRoot.*::NameOfChild1.*::data;
var data2:String = NameOfRoot.*::NameOfChild2.*::data;

Я бы предпочел сделать эту задачу более абстрактной, чтобы в случае введения NameOfChild3 мне не нужно было обновлять код. Например:

var data:String = NameOfRoot.*::{variable}.*::data;

Есть ли у кого-нибудь представление о том, как это можно сделать?


person TERACytE    schedule 17.01.2010    source источник


Ответы (3)


Используйте свойство child (пример LiveDocs здесь):

var tagName:String = "NameOfChild1";
var data:String = NameOfRoot.child(tagName).data;

Это без пространства имен - не уверен, нужно ли это в вашем случае, но я предполагаю, что вы бы добавили несколько *::?

person Michael Brewer-Davis    schedule 18.01.2010

это тоже работает:

var data:String = NameOfRoot..data;

но если у вас более 1 узла данных, вам придется кое-что разобрать.

person invertedSpear    schedule 18.01.2010

Похоже на ". *." операция будет работать. Интересно, это ли самый простой способ справиться с этой проблемой?

var data:String = NameOfRoot.*.*::data;
person TERACytE    schedule 17.01.2010