/* 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>;
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
ノードしかない場合は、このように行くことができます
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 に答える
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 に答える
-2
ActionScript 3でE4X構文を使用すると、次のようになります。
report.prop5[0] = false;
于 2008-11-17T15:48:04.930 に答える