Impossible d'attribuer à une valeur non-référence
-
22-09-2019 - |
Question
J'ai un problème étrange, j'ai un XMLList avec des éléments qui ont la position d'attribut de 0 à x. Quand je veux ajouter du texte à un élément de cette XMLList par la déclaration suivante, je reçois un message d'erreur:
textElements.(@position == columnIndex) = "anyString";
1050:. Impossible d'attribuer à une valeur non de référence
Quel est le problème ici?
Merci Markus
La solution
vous devez être un peu plus précis en traitant XMLLists. Vous avez fait de le dire quel élément dans la liste que vous êtes désireux de changer, même lorsque vous filtrez, est réduit à 1. Cela devrait le faire pour vous:
textElements.(@position==columnIndex)[0]= "anyString";
Autres conseils
L'utilisation de [0] dans la réponse par invertedSpear fait référence pas réellement l'indice de XMLList, on indique la position de l'enfant à l'accès du noeud sélectionné. A titre de comparaison
textElements.(@position==columnIndex).appendChild("anyString");
Cela va faire la même chose que la réponse de invertedSpear, mais ajoutera un enfant au nœud sélectionné, au lieu d'accéder au nœud enfant directement par index. Un nœud, si elle existe, aura toujours l'enfant indexé à 0 disponible, dans ce cas, il se réfère à la valeur du nœud lui-même.
Considérez ce qui suit:
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]);
Le premier fonctionnera, comme le montre. Le second travaillera également, comme le montre. Le troisième, cependant, échouera car le nœud avec la position == 3 ne dispose pas d'un enfant à l'index 1. Notez que cela fonctionnera ...
c.(@size == 3).children()[1] = 'NEW test';
trace(c);