В AS3, как использовать значение XML Node в качестве другого узла? - PullRequest
0 голосов
/ 09 июня 2011

Предположим, у меня есть 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 или что-либо еще .." ??

Ответы [ 3 ]

2 голосов
/ 09 июня 2011

Не проверял, но это должно дать вам общее представление (что вы можете динамически выбирать с помощью «ключа»):

var xmlVal:XML = new XML(... the above xml);

var type:String = xmlVal.lang;

var result:XML = xmlVal[type];
0 голосов
/ 09 июня 2011

Это один из наиболее расширяемых и последовательных способов сделать это.

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" );
0 голосов
/ 09 июня 2011

Попробуйте использовать:

var lang:String = xmlVal.lang;
var strings:XMLList = xmlVal.elements(lang).text;
...