2013-02-24 6 views
4

У меня есть следующий XMLКак добавить атрибут к XMLList без зацикливания в E4X

var xml:XML = <test> 
    <node id='1'/> 
    <node id='2'/> 
    <node id='3'/> 
    <node id='4'/> 
    <node id='5'/> 
</test>; 

var xmlist:XMLList = xml.children(); 

for each (var node:XML in xmlist) 
{ 
    [email protected] = "1"; 
} 

Я пробегаем по каждому узлу и добавление атрибута. Как я могу сделать это без циклов? Я попытался это

xmlist.attributes()[email protected] = "1"; 

, но я получаю сообщение об ошибке «TypeError: Error # 1089: Назначение в списки с более чем один элемент не поддерживается

+0

В чем проблема, которую вы хотите преодолеть? это скорость или крутизна эксцесса? – robkuz

+0

Я ищу кратковременность, а также скорость, почему мне нужно перебирать все узлы, чтобы добавить атрибут? это будет более удобно, если я смогу добиться того же в одной строке кода. –

+0

, если вы хотите сделать это в 1 LOC, почему вы не заворачиваете его в вызов функции? – robkuz

ответ

0

Как говорится в сообщении об ошибке, оно не поддерживается. Поскольку вы не можете выполнить это назначение для нескольких элементов, я не вижу способа сделать это без итерации над xml.

Для удовольствия, я попытался это и получил ту же ошибку: [email protected]=1

Это просто немного более лаконична версия:

var xmlist:XMLList = xml.children(); 
xmlist.attributes()[email protected] = "1"; 
+0

hi sunil Я тоже попробовал то же самое, но не использовал, спасибо за попытку .... может мы достигаем этого любыми другими средствами в e4x? –

1

это было 2 недели, так как этот вопрос задают, но там всегда будет быть больше людей, нуждающихся в помощи.

TypeError: Ошибка # 1089 вызвана результатом более чем одного объекта в xml.

Обычно я принимал эту ошибку чем-то вроде этой операции = xml.classes. (@ Id == 1) .students. (@ No == 2). @ Grade = "A"; Ошибка, вызванная тем, что в xml.classes было более одного ученика, поэтому он попытался вернуть все из них. Как говорится в ошибке: «Назначение спискам с более чем одним элементом не поддерживается». Вы не можете присвоить значение нескольким объектам одновременно.

И так как вы добавляете все s в XMLList, я не уверен в причине, так как я не использую XMLList. это бесполезно, как я думаю. Поэтому, если вы измените свой код как

var xml:XML = <test> 
    <node id='1'/> 
    <node id='2'/> 
    <node id='3'/> 
    <node id='4'/> 
    <node id='5'/> 
</test>; 


for each (var n:XML in xml) 
{ 
    [email protected] = "1"; 
} 

Проблема должна быть решена. Но я бы предложил вам использовать «id» как уникальный ключ. Затем вы можете использовать этот уникальный ключ для доступа к определенным элементам в XML, например

xml.node.(@id=="1")[email protected]="1"; 

Я надеюсь, что это вам поможет. Будьте осторожны

-Ozan

Смежные вопросы