动态创建/修改XML:如何为node节点动态绑定uri变量值?
解决ActionScript中XML属性动态赋值的问题
你遇到的核心问题是ActionScript XML字面量的动态属性赋值语法使用有误,下面给你几种可行的解决方案:
方法1:先创建XML元素再设置属性
这是最直观且不易出错的方式,先构建空的<node>元素,再通过@符号访问并设置它的uri属性:
var xml123:XML = <root></root>; // 先创建空的node元素 var nodeElement:XML = <node></node>; // 动态为uri属性赋值 nodeElement.@uri = urlValues[0]; xml123.appendChild(nodeElement); // 后续XML构建代码保持不变 xml123.child("node").appendChild(<row></row>); xml123.child("node").child("row").appendChild(<item>item01</item>); xml123.child("node").child("row").appendChild(<item>item02</item>); xml123.child("node").appendChild(<row></row>); xml123.child("node").row[1].appendChild(<item>item03</item>); xml123.child("node").row[1].appendChild(<item>item04</item>);
方法2:在XML字面量中直接使用变量(正确语法)
你之前尝试的<node uri=${urlValues[0]} ></node>思路是对的,但语法细节有误:在ActionScript的XML字面量里,动态属性值直接用{}包裹变量即可,不需要额外的引号(AS会自动处理类型转换)。正确写法如下:
var xml123:XML = <root></root>; // 直接用{}包裹变量赋值给uri属性 xml123.appendChild(<node uri={urlValues[0]} ></node>); // 后续代码不变...
如果之前这样写无效,建议先通过trace(urlValues[0])确认变量是否有有效值,比如检查userSelected.split("@")是否返回了预期的数组。
方法3:通过XML构造函数拼接字符串
如果前两种方式遇到兼容性问题,还可以用字符串拼接构造XML片段,再转换为XML对象:
var xml123:XML = <root></root>; // 拼接XML字符串(注意:若urlValues[0]包含单引号/特殊字符,需先转义) var nodeStr:String = "<node uri='" + urlValues[0] + "'></node>"; var nodeElement:XML = new XML(nodeStr); xml123.appendChild(nodeElement); // 后续代码不变...
这种方式需要注意,若urlValues[0]包含XML特殊字符(如'、<等),必须先进行转义,否则会破坏XML结构。
另外要说明的是,你之前用的${urlValues[0]}是字符串插值语法,仅适用于普通字符串或trace输出场景,在XML字面量的属性赋值中并不适用,所以才会失效。
内容的提问来源于stack exchange,提问作者Subodh Joshi
相关产品推荐
相关产品推荐

