替换AS3中的xml子节点值

时间:2012-09-01 14:52:26

标签: xml actionscript-3

我正在尝试更新XML结构的子节点中的值。新值应来自Input TextField,其实例名称与我应更新的节点的属性值相同。

例如,当关注名为“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 + ">"));

1 个答案:

答案 0 :(得分:2)

XML.replace()确实希望第二个参数是一个XML对象,然后将其转换为(XML-)字符串。含义:它将“<eng>Description</eng>”替换为“rrr”,并按预期工作。您需要将其传递给XML对象或将其传递给“<eng>rrr</eng>”。如果VarHolder.activeLang的值明显为“eng”,则可以使用:

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