Domanda

Ho un problema strano, ho un XMLList con elementi che hanno la posizione di attributo da 0 a x. Quando voglio aggiungere del testo a un elemento di quella XMLList dalla seguente dichiarazione, ricevo un messaggio di errore:

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

1050:. Non è possibile assegnare a un valore non di riferimento

Cosa c'è di sbagliato qui?

Grazie Markus

È stato utile?

Soluzione

devi essere un po 'più specifico quando si tratta di XMLLists. In realtà necessario indicare quale elemento nella lista si vogliono cambiare, anche quando si filtra verso il basso per solo 1. Questo dovrebbe farlo per voi:

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

Altri suggerimenti

L'uso di [0] nella risposta di invertedSpear non viene effettivamente riferendo l'indice XMLList, esso indica la posizione del bambino all'accesso del nodo selezionato. Per confronto

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

Questo farà la stessa cosa di risposta di invertedSpear, ma aggiungerà un bambino per il nodo selezionato, piuttosto che l'accesso al nodo figlio direttamente in base all'indice. Un nodo, se esiste, avrà sempre il bambino indicizzati da 0 disponibile, in questo caso si riferisce al valore del nodo stesso.

Si consideri il seguente:

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

La prima funziona, come mostrato. La seconda funziona anche, come illustrato. Il terzo, invece, non riuscirà perché il nodo con la posizione == 3 non ha un figlio di indice 1. Si noti che questo funzionerà ...

c.(@size == 3).children()[1] = 'NEW test';
trace(c);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top