/* 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>;
Eric Belair
问问题
15173 次
5 回答
5
这似乎正是你想要的。这只是你的代码,修正了一些错别字。
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);
于 2008-12-02T05:17:31.317 回答
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 文件!
于 2011-01-12T11:54:02.193 回答
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'
}
于 2008-11-17T20:47:37.057 回答
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;
}
于 2010-10-15T00:32:49.467 回答
-2
在 ActionScript 3 中使用 E4X 语法,我猜想是这样的:
report.prop5[0] = false;
于 2008-11-17T15:48:04.930 回答