Невозможно присвоить нереферентное значение - PullRequest
0 голосов
/ 23 января 2010

У меня странная проблема, у меня есть XMLList с элементами, которые имеют положение атрибута от 0 до x. Когда я хочу добавить текст к элементу этого XMLList с помощью следующего оператора, я получаю сообщение об ошибке:

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

1050: невозможно присвоить нереферентное значение.

Что здесь не так?

Спасибо Markus

Ответы [ 2 ]

3 голосов
/ 23 января 2010

Использование [0] в ответе invertedSpear на самом деле не ссылается на индекс 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);
2 голосов
/ 23 января 2010

Вы должны быть немного более конкретным, когда имеете дело со списками XMLL. Вы действительно должны сказать ему, какой элемент в списке вы хотите изменить, даже если вы отфильтровываете его до 1. Это должно сделать для вас:

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