2011-06-09 114 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"); 
相關問題