0

我正在尝试更新 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 + ">"));
4

1 回答 1

2

XML.replace()确实希望第二个参数是一个 XML-Object,然后将其转换为(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

于 2012-09-01T15:23:40.153 回答