Невозможно назначить значение, не являющееся ссылкой
-
22-09-2019 - |
Вопрос
У меня странная проблема: у меня есть XMLList с элементами, у которых позиция атрибута от 0 до x.Когда я хочу добавить текст к элементу этого XMLList с помощью следующего оператора, я получаю сообщение об ошибке:
textElements.(@position == columnIndex) = "anyString";
1050:Невозможно назначить значение, не являющееся ссылкой.
Что здесь не так?
Спасибо, Маркус
Решение
вам нужно быть немного более конкретным при работе с XMLLists.На самом деле вам нужно указать ему, какой элемент в списке вы хотите изменить, даже если вы отфильтровываете его только до 1.Это должно сделать это для вас:
textElements.(@position==columnIndex)[0]= "anyString";
Другие советы
Использование [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);