无法分配给非参考值

时间:2010-01-22 21:34:47

标签: flex e4x xmllist

我有一个奇怪的问题,我有一个XMLList,其元素的属性位置从0到x。当我想通过以下语句将文本添加到该XMLList的元素时,我收到一条错误消息:

textElements.(@position == columnIndex) = "anyString";
  

1050:无法分配非参考值。

这里有什么问题?

由于 马库斯

2 个答案:

答案 0 :(得分:3)

在invertSpear的答案中使用[0]实际上并不是引用XMLList索引,而是指示孩子访问所选节点的位置。为了比较

textElements.(@position==columnIndex).appendChild("anyString");

这将与invertedSpear的回答相同,但会将子项添加到所选节点,而不是直接通过索引访问子节点。一个节点(如果存在)将始终将子索引为0,在这种情况下,它指的是节点本身的值。

请考虑以下事项:

var xml:XML = <root><node position="1" /><node position="2" /><node position="3" ><subnode>Test1</subnode><subnode>Test2</subnode></node></root>;

var c:XMLList = xml.children();
trace(c);

c.(@position == 1)[0] = "first test";
c.(@position == 2).appendChild("SECOND TEST");
c.(@position == 3)[1] = 'FINAL_test';

trace(c); 
trace(c[0][0]);

第一个将起作用,如图所示。如图所示,第二个也可以工作。但是,第三个将失败,因为位置== 3的节点在索引1处没有子节点。请注意这将起作用...

c.(@size == 3).children()[1] = 'NEW test';
trace(c);

答案 1 :(得分:2)

在处理XMLLists时,您必须更具体一些。你实际上必须告诉它你想要改变的列表中的哪个项目,即使你将它过滤到只有1.这应该为你做:

textElements.(@position==columnIndex)[0]= "anyString";