在AS3中,XML节点值如何用作另一个节点?

时间:2011-06-09 12:18:10

标签: xml flash flex actionscript-3 adobe

假设我有一个XML

<xml>

<lang>en</lang>
<en>
    <text id="123">One Two Three</text>
    <text id="hello">Hello</text>
</en>

</xml>

只有当lang值为“en”时,“en”标签才会出现。 如果lang的值是“de”

<lang>de</lang>
<de>
        <text id="123">One Two Three</text>
        <text id="hello">Hello</text>
</de>

如何在我的动作3代码中获得此名称dinamicaly。

假设我想使用

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

我不能使用if(xmlVal.lang ==“en”)..因为lang值可以是任何字符串。但是该名称中应该有一个子节点.. !!

如何从节点“en或de或者什么......”获取值?“

3 个答案:

答案 0 :(得分:2)

尚未经过测试,但这应该为您提供一般性的想法(您可以使用“密钥”动态选择):

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

var type:String = xmlVal.lang;

var result:XML = xmlVal[type];

答案 1 :(得分:0)

尝试使用:

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

答案 2 :(得分:0)

这是一种更具扩展性和一致性的方法。

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" );