Pergunta

Eu tenho um problema estranho, tenho um xmllist com elementos que têm a posição de atributo de 0 a x. Quando eu quiser adicionar texto a um elemento desse xmllist pela declaração a seguir, recebo uma mensagem de erro:

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

1050: Não é possível atribuir a um valor de não referência.

O que há de errado aqui?

Obrigado Markus

Foi útil?

Solução

Você precisa ser um pouco mais específico ao lidar com xmllists. Você realmente precisa dizer qual item na lista que deseja mudar, mesmo quando o filtra apenas para 1. Isso deve fazer isso por você:

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

Outras dicas

O uso de [0] na resposta pelo InvertedSpear não está realmente referenciando o índice XMLLIST, está indicando a posição da criança para acessar o nó selecionado. Para comparação

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

Isso fará a mesma coisa que a resposta da InvertedSpear, mas adicionará uma criança ao nó selecionado, em vez de acessar o nó filho diretamente por índice. Um nó, se existir, sempre terá o filho indexado em 0 disponível, neste caso, refere -se ao valor do próprio nó.

Considere o seguinte:

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]);

O primeiro funcionará, como mostrado. O segundo também funcionará, como mostrado. O terceiro, no entanto, falhará porque o nó com posição == 3 não tem um filho no índice 1. Observe que isso funcionará ...

c.(@size == 3).children()[1] = 'NEW test';
trace(c);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top