سؤال

لدي مشكلة غريبة ، ولدي Xmllist مع عناصر لديها موضع السمة من 0 إلى X. عندما أرغب في إضافة نص إلى عنصر من هذا xmllist بواسطة العبارة التالية ، أحصل على رسالة خطأ:

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

1050: لا يمكن تعيين قيمة غير مرجعية.

ما هو الخطأ هنا؟

شكرا ماركوس

هل كانت مفيدة؟

المحلول

يجب أن تكون أكثر تحديداً عند التعامل مع XMllists. عليك بالفعل أن تخبره عن العنصر في القائمة التي ترغب في تغييرها ، حتى عند تصفيةه إلى 1. يجب أن يفعل ذلك من أجلك:

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

نصائح أخرى

لا يشير استخدام [0] في الإجابة عن طريق المقلوب في الواقع إلى مؤشر Xmllist ، فهو يشير إلى موضع الطفل للوصول إلى العقدة المحددة. للمقارنة

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

هذا سيفعل نفس الشيء مثل إجابة مقلوبة ، ولكنه سيضيف طفلًا إلى العقدة المحددة ، بدلاً من الوصول إلى العقدة الفرعية مباشرة عن طريق الفهرس. العقدة ، إذا كانت موجودة ، ستكون دائمًا ما يتم فهرسة الطفل عند 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top