/* I start with this: */
<Report>
<prop1>4</prop1>
<prop2>2255</prop2>
<prop3>true</prop3>
<prop4>false</prop4>
<prop5>true</prop5>
</Report>
/* I want this result (change the value of node "prop5"): */
<Report>
<prop1>4</prop1>
<prop2>2255</prop2>
<prop3>true</prop3>
<prop4>false</prop4>
<prop5>false</prop5>
</Report>
/* I tried this: */
var reportXML:XML =
<Report>
<prop1>4</prop1>
<prop2>2255</prop2>
<prop3>true</prop3>
<prop4>false</prop4>
<prop5>true</prop5>
</Report>;
var myArray:Array = [{xmlNodeName: "prop5", value: false}];
for each (var item:Object in myArray)
{
report.xml[item.xmlNodeName] = item.value.toString();
}
/* But this just adds a new node, resulting in this: */
<Report>
<prop1>4</prop1>
<prop2>2255</prop2>
<prop3>true</prop3>
<prop4>false</prop4>
<prop5>true</prop5>
<prop5>false</prop5>
</Report>;
答案 0 :(得分:4)
这似乎正是你想做的。这只是你的代码修复了一些拼写错误。
var reportXML:XML =
<Report>
<prop1>4</prop1>
<prop2>2255</prop2>
<prop3>true</prop3>
<prop4>false</prop4>
<prop5>true</prop5>
</Report>;
var myArray:Array = [{xmlNodeName: "prop5", value: false}];
for each (var item:Object in myArray)
{
reportXML[item.xmlNodeName] = item.value.toString();
}
trace(reportXML);
答案 1 :(得分:2)
在创建对象后,我无法编辑XML对象中的元素,如果可能的话,Adobe文档也不清楚。
为了动态设置值,我创建了一个临时字符串,并在此处附加了我的所有XML节点和属性。 然后,您可以简单地创建xml对象,将临时字符串指定为单独的参数。
类似的东西:
var tempString:String = "<XML_PARENT><SOME_SUB_NODE>";
tempString += "<SOMETHING_ELSE value=\"" + someTextField.text + "\"/>";
tempString += "</SOME_SUB_NODE></XML_PARENT>";
var xmlObj:XML = new XML( tempString );
现在,如果您追踪xmlObj,您将获得
<XML_PARENT>
<SOME_SUB_NODE>
<SOMETHING_ELSE value=""/>
</SOME_SUB_NODE>
<XML_PARENT>
这将允许您动态地为字符串分配任何内容,然后在事后构建XML。如果您想要编辑现有的XML对象,那么它可能只是使用toString()并相应地修改字符串。 它至少可以帮助我们开始动态构建XML文件!
答案 2 :(得分:1)
我刚刚确认这有效:
private var reportXML:XML =
<Report>
<prop1>4</prop1>
<prop2>2255</prop2>
<prop3>true</prop3>
<prop4>false</prop4>
<prop5>true</prop5>
</Report>;
private function changeXML():void {
reportXML.prop5[0] = 'false';
trace(reportXML.prop5); // traces 'false'
}
答案 3 :(得分:1)
如果您只有这个节点,那么
var node:XML
inp = new textfield(style, node.text());
inp.addEventListener(TextEvent.TEXT_INPUT, change, false, 0, true);
addChild(inp);
private function change(e:TextEvent):void
{
XML(node.parent())[node.name()][node.childIndex()] = inp.text+e.text;
}
答案 4 :(得分:-2)
在ActionScript 3中使用E4X语法我想这会是:
report.prop5[0] = false;