PDA

Просмотр полной версии : Добавить значение переменной в XML


olejan1991
22.03.2013, 00:35
Переменная counter может быть любым числом. Когда пишу код ниже, записывается название переменной. Как сделать, чтобы записывалось ее значение?


var counter:int = 0;
dataFromXML.appendChild(<CELL><OBJECT/>counter</CELL>);

mikhailk
22.03.2013, 01:12
var counter:int = 333;
var dataFromXML:XML = <dataFromXML/>;

dataFromXML.appendChild(XML("<cell><object/>"+String(counter)+"</cell>"));

trace(dataFromXML);

olejan1991
22.03.2013, 01:34
Спасибо

Nooob
22.03.2013, 02:23
var counter:int = 333;
var dataFromXML:XML = <dataFromXML/>;

dataFromXML.appendChild(XML("<cell><object/>"+String(counter)+"</cell>"));

trace(dataFromXML);


При такой записи будет конвертация String в XML, мне больше нравятся записи вида:
var counter:int = 333;
var dataFromXML:XML = <dataFromXML/>;

dataFromXML.appendChild(<cell><object/>{counter}</cell>);

trace(dataFromXML);

mikhailk
22.03.2013, 17:25
При такой записи будет конвертация String в XML

Кстати, вроде к данной теме отношения и не имеет прямого, но иногда я специально прогоняю через конвертацию в String, чтобы получить копию XML-объекта. Как-то давно здорово нагрелся на реализации XML в AS3.


var man:XML;
var boy:XML;

// var 1
man = <man age="25" />;
boy = man;
boy.@age = "12";
trace(man.toXMLString()); // <man age="12"/>

// var 2
man = <man age="25" />;
boy = XML(man.toXMLString());
boy.@age = "12";
trace(man.toXMLString()); // <man age="25"/>

gagaga
24.03.2013, 00:07
Кстати, вроде к данной теме отношения и не имеет прямого, но иногда я специально прогоняю через конвертацию в String, чтобы получить копию XML-объекта. Как-то давно здорово нагрелся на реализации XML в AS3.


var man:XML;
var boy:XML;

// var 1
man = <man age="25" />;
boy = man;
boy.@age = "12";
trace(man.toXMLString()); // <man age="12"/>

// var 2
man = <man age="25" />;
boy = XML(man.toXMLString());
boy.@age = "12";
trace(man.toXMLString()); // <man age="25"/>


не советуйте фигни. при прогоне через toXMLString(), спэйсинги и лайнэндиги добавляются, при дальнейшем приведении к XML они не все схлопнутся и добавятся как пустые ноды. Для клонирования XML, есть метод copy ()
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/XML.html#copy()

mikhailk
24.03.2013, 00:37
спэйсинги и лайнэндиги добавляются

Не знаю, что там у Вас добавляется, у меня проблем с этим ни разу не было.

Но согласен, если для XML и XMLList предусмотрен метод copy(), разумно пользоваться им.

gagaga
24.03.2013, 00:59
Не знаю, что там у Вас добавляется, у меня проблем с этим ни разу не было.

Но согласен, если для XML и XMLList предусмотрен метод copy(), разумно пользоваться им.

вы их не замечаете, потому что конвертер стринг-хмл их потом съедает, но не всегда

mikhailk
24.03.2013, 10:39
вы их не замечаете, потому что конвертер стринг-хмл их потом съедает, но не всегда

Приведите пример некорректного поведения.

Добавлено через 22 минуты
Собственно, у меня стоит ignoreWhitespace=true, видимо поэтому я не наблюдаю указанных паразитных явлений.

gagaga
24.03.2013, 14:07
ну я сейчас не буду тестировать и искать ситуации в которых ваш костыль не работает, я просто говорю что такие ситуации бывают (из личного опыта знаю), к тому же ваш подход не оптимален. Приводить структурированный объект к строке, а потом парсить его обратно в структуру, чтобы сделать копию при наличии специального метода, который просто скопирует байты из одного участка памяти в другой - это глупость. Просто предупреждаю топик стартера и всех читателей топика, не слушать вредных советов. Я думаю любой профессионал, который разбирается в вопросе согласится со мной

mikhailk
24.03.2013, 14:59
ну я сейчас не буду тестировать и искать ситуации в которых ваш костыль не работает

При чем тут костыль?
Думаю, Вы просто сами не очень в курсе, о чем говорите.

В хэлпе все это есть:


XML.ignoreWhitespace = false;
var xml1:XML = <foo> </foo>;
trace(xml1.children().length()); // 1

XML.ignoreWhitespace = true;
var xml2:XML = <foo> </foo>;
trace(xml2.children().length()); // 0


Так что тут не костыль, а лишнее преобразование типа к String и обратно. Насчет того, что разумнее использовать метод copy() я вроде еще выше согласился, так что о чем речь вообще непонятно.

gagaga
24.03.2013, 20:19
я читал хелп и знаю что такое ignoreWhitespace ... просто вы, по всей видимости, мало работали с XML, а вот я - наоборот. И знаю что оно сработает не всегда, потому что сам непосредственно с этим сталкивался. это преобразование вообще нужно только для вывода в лог, все другие его использования можно автоматически считать г*внокодом, а тех кто им пользуется некомпетентными г*внокодерами. Так что я просто предупредил топик стартера чтоб не получал граблями в лицо, а вы почему-то начали посылать меня читать документацию, как-будто я посоветовал глупость, а не вы

mikhailk
25.03.2013, 00:09
Вы хотите, чтобы я в третий раз согласился, что надо использовать copy()? :D