奇妙な問題があります。0からxまでの属性位置を持つ要素を持つXMLListがあります。次のステートメントでそのXMLListの要素にテキストを追加したい場合、エラーメッセージが表示されます。
textElements.(@position == columnIndex) = "anyString";
1050:非参照値に割り当てることができません。
ここで何が問題になっていますか?
ありがとうMarkus
奇妙な問題があります。0からxまでの属性位置を持つ要素を持つXMLListがあります。次のステートメントでそのXMLListの要素にテキストを追加したい場合、エラーメッセージが表示されます。
textElements.(@position == columnIndex) = "anyString";
1050:非参照値に割り当てることができません。
ここで何が問題になっていますか?
ありがとうMarkus
InvertedSpear による回答での [0] の使用は、実際には 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]);
示されているように、最初のものは機能します。示されているように、2 番目のものも機能します。ただし、位置 == 3 のノードにはインデックス 1 に子がないため、3 番目は失敗します。これは機能することに注意してください...
c.(@size == 3).children()[1] = 'NEW test';
trace(c);
XMLLists を扱うときは、もう少し具体的にする必要があります。実際には、リスト内のどの項目を変更したいのかを伝える必要があります。フィルターで 1 つだけに絞り込む場合でも、これでうまくいくはずです。
textElements.(@position==columnIndex)[0]= "anyString";