我有一个奇怪的问题,我有一个 XMLList,其中的元素的属性位置从 0 到 x。当我想通过以下语句将文本添加到该 XMLList 的元素时,我收到一条错误消息:
textElements.(@position == columnIndex) = "anyString";
1050:无法分配给非参考值。
这里有什么问题?
谢谢马库斯
我有一个奇怪的问题,我有一个 XMLList,其中的元素的属性位置从 0 到 x。当我想通过以下语句将文本添加到该 XMLList 的元素时,我收到一条错误消息:
textElements.(@position == columnIndex) = "anyString";
1050:无法分配给非参考值。
这里有什么问题?
谢谢马库斯
invertedSpear 在回答中使用 [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);
在处理 XMLLists 时,您必须更具体一点。您实际上必须告诉它您要更改列表中的哪个项目,即使您将其过滤到仅 1。这应该为您做:
textElements.(@position==columnIndex)[0]= "anyString";