2012-09-01 97 views
0

我試圖更新XML結構的子節點中的值。新的值應該來自一個Input TextField,它的實例名稱與我應該更新的節點的屬性的值相同。替換AS3中的xml子節點值

例如,聚焦了文本字段名爲 「label10」 的時候,我應該編輯節點:

<label id="label10"> 
    <eng>Description</eng> 
    <de>DE Description</de> 
</label> 

...這是很正常的,我實現它使用這個回調函數:

private function onFocusOut (evt:FocusEvent):void { 
     var nodeToModify:XML = xmlFillData.label.(@id==evt.target.name)[0]; 
     trace ("nodeToModify is " +nodeToModify); 
} 

現在我的問題是我希望替換子節點eng或de的內容,這取決於一個名爲VarHolder的靜態類中定義的變量,但我無法做到這一點。

我試圖使用回調函數內這一行:

nodeToModify.replace (VarHolder.activeLang , evt.target.text); 

但當時如果我跟蹤nodeToModify,這是結果(標籤消失)

<label id="label10"> 
rrr 
<de>DE Description</de> 

任何幫助?


編輯(和解決):試圖實現@jens答案。 這是我做的

nodeToModify.replace (VarHolder.activeLang, new XML("<" + VarHolder.activeLang + ">" + evt.target.text + "</" + VarHolder.activeLang + ">")); 

回答

2

XML.replace()不希望第二個參數是一個XML對象,然後轉換爲(基於XML)字符串。含義:它將'<eng>Description</eng>'替換爲'rrr',並按預期工作。您需要將它傳遞給一個XML對象或將其傳遞給'<eng>rrr</eng>'。如果VarHolder.activeLang的價值顯然是「工程」,你可以這樣做:

nodeToModify.replace (VarHolder.activeLang , "<" + VarHolder.activeLang + ">" + 
          evt.target.text + "</" + VarHolder.activeLang + ">"); 

查看XML.replace()此鏈接瞭解更多信息: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/XML.html#replace%28%29

+0

THX @jens,我嘗試這個解決方案之前,張貼問題,我希望有另一種解決方案來做到這一點。順便說一句,我放棄了,因爲當我追蹤它時,我正在閱讀:<eng> rrr </eng >任何想法如何擺脫? –