2011-06-09 115 views
0

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

<xml> 

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

</xml> 

的“EN”标签仅在郎值为“en”。 如果LANG的值是“德”

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

如何我在ActionScript 3代码dinamicaly得到这个名字。

假设我想用

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

我不能使用,如果(xmlVal.lang ==“EN”)..因为郎值可以是任何字符串。但是这个名字应该有一个子节点.. !!

如何从节点“en或de或以前的任何地方”获取值?

+0

我米不知道下面的工作,但,你有没有尝试过:var langXml:* = xmlVal [xmlVa l.lang];'? – Kevin 2011-06-09 12:24:52

回答

2

没有测试,但是这应该给你的总体思路(你可以动态地选择使用“钥匙”):

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

var type:String = xmlVal.lang; 

var result:XML = xmlVal[type]; 
+0

虽然它更具体一些,但您也可以检查'if(xmlVal.en!= undefined)' – divillysausages 2011-06-09 12:27:06

+0

1.键入您的变量。 2.不要在顶级类上使用构造函数(除了矢量和具有设定长度的数组外)。 – cwallenpoole 2011-06-09 12:29:46

+0

@cwallenpoole:你说的#2是什么意思?你是指'新的XML(...'? – Ocelot20 2011-06-09 14:17:58

0

尝试使用:

var lang:String = xmlVal.lang; 
var strings:XMLList = xmlVal.elements(lang).text; 
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"); 
相关问题