2010-01-22 2 views
0

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

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

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

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

Благодаря Markus

ответ

2

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

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

Использование [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); 
+0

Большое спасибо! ваши комментарии мне очень помогли! Замечательно! Cheers Markus – Markus

+0

@Markus Это обычай в SO, чтобы проголосовать за полезные ответы (нажав стрелку вверх) и принять ответ (проверяя зеленый галочку), который помог вам больше всего. – Amarghosh