#xml #flash #apache-flex #actionscript-3 #adobe
#xml #flash #apache-flex #actionscript-3 #adobe
Вопрос:
Предположим, у меня есть XML
<xml>
<lang>en</lang>
<en>
<text id="123">One Two Three</text>
<text id="hello">Hello</text>
</en>
</xml>
тег «en» используется только в том случае, если значение lang равно «en».
Если значение lang равно «de»
<lang>de</lang>
<de>
<text id="123">One Two Three</text>
<text id="hello">Hello</text>
</de>
Как мне динамически получить это имя в моем коде actionscript 3.
Предположим, я хочу использовать
var xmlVal = new XML(... the above xml)
var lang = xmlVal.lang;
Я не могу использовать if (xmlVal.lang == «en») .. потому что значением lang может быть любая строка. но с этим именем должен быть дочерний узел ..!!
Как мне получить значения из узла «en или de или что еще ..»??
Комментарии:
1. Я не уверен, работает ли следующее, но вы пробовали:
var langXml:* = xmlVal[xmlVal.lang];
?
Ответ №1:
Не тестировал, но это должно дать вам общее представление (которое вы можете динамически выбирать с помощью «ключа»):
var xmlVal:XML = new XML(... the above xml);
var type:String = xmlVal.lang;
var result:XML = xmlVal[type];
Комментарии:
1. хотя это немного более конкретно, вы также можете проверить
if( xmlVal.en != undefined )
2. 1. Введите свои переменные. 2. Не используйте конструкторы в классах верхнего уровня (за исключением векторов и массивов, которые имеют заданную длину).
3. @cwallenpoole: Что вы подразумеваете под # 2? Вы имеете в виду
new XML(...
?
Ответ №2:
Попробуйте использовать:
var lang:String = xmlVal.lang;
var strings:XMLList = xmlVal.elements(lang).text;
Ответ №3:
Это один из более расширяемых и согласованных способов сделать это.
var xmlVal:XML = XML( /*above*/ );
// xmlVal.child("lang"); is a long-hand for xmlVal.lang, but more explicit
// it can also save you headache later in some corner cases.
var langs:XMLList = xmlVal.child("lang");
// if there is only one lang child, this will grab its' child text
// use toString to make sure you only grab the string pieces.
var langVal:String = langs[0].text().toString().replace(/s/g, "");
var langValue:XMLList = xmlVal.child(langVal);
Тем не менее, вам лучше, если вы можете изменить его с:
...
<lang>en</lang>
<en>
Для
...
<lang abbreviation="en"><text id="123">One Two Three</text>
<text id="hello">Hello</text></lang>
Затем вы можете вызвать:
var xmlVal:XML = XML( /*above*/ );
var finalList:XMLList = xmlVal.child( "lang" ).( @abbreviation == "en" );