Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как достать XML аттрибут зная его имя в string 
:(
    Опции темы
PROCESSOR
Дата 27.8.2005, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 25.5.2005

Репутация: нет
Всего: нет



XML тег: <NODE name="r"/>
код:

funcition set(q){
z=eval ("object.attributes."+q)
z="eee"
}

функция получает имя аттрибута ("name" ) как string > q="name"
object - ссылка на XML обьект ( тег этот . можно увидеть при trace (object) )
короче неработает. Походу в z - записывается не ссылка на этот аттрибут, а его значение . Поэтому неработает.

object.attributes.q ="eee" тоже не получается ( он не определяет Q как переменную, а думает, что это имя аттрибута )

Как мне в такой ситуации изменить значение этого аттрибута ?

-----------------

Также почему-то не работает:

q="function set(){ object.attributes."+q+"='eee' } "
eval(q)
set()

Это сообщение отредактировал(а) PROCESSOR - 27.8.2005, 07:03
PM MAIL   Вверх
AntonioBanderaz
Дата 27.8.2005, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Есть XML:

<test attr='testAtrib'/> (как я понимаю это аналогично <test attr='testAtrib'></test>)

Да, кстати, чтобы работало во Flash, надо ставить одинарные ковычки в значениях атрибутов... Х/З почему...

Код

myTestXML = new XML();
trace(myTestXML.childNode[0].attributes.attr);

//Если хош увидеть все атрибуты, допустим у тебя кроме attr, ещё штук 10
myATTR = myTestXML.childNode[0].attributes;
for(attribute in myATTR)
      trace(attribute + "::  " + myATTR[attribute]);


А теперь как задать атрибут...
Я обычно делал так...

Код

myTestXML = new XML();
testN = myTestXML.createElement('test');
testN.attributes.attr = 'testAtrib';
myTestXML.appendChild(testN);



Теперь функции:
Код

function setAttr(hrefXML:Object,attrName:String,attrValue:String):Void {
      var EvTXT:String;
      EvTXT = "hrefXML.attributes."+attrName+" = ' " +attrValue+" ' ";
      eval(EvTXT);
}

//Или вот так можно попробовать...

function setAttr(hrefXML:Object,NewNodeName:String,attrName:String,attrValue:String):Void {
      var EvTXT:String;
      testN = hrefXML.createElement(NewNodeName);
      EvTXT = "testN.attributes."+attrName+" = ' " +attrValue+" ' "; eval(EvTXT);
      hrefXML.appendChild(testN);
}


Добавлено @ 15:42
Но Ты понимаешь, что в первой и второй функциях разные hrefXML.... =))))


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
PROCESSOR
Дата 28.8.2005, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 25.5.2005

Репутация: нет
Всего: нет



меня уже научили:

оказывается, аттрибуты - это массив простой. чтоб достать аттрибут или установитьь:

object.attributes['attrname']="eee"

имя аттрибута указать в кавычках - и ВСЁЁЁ !!

------------
Ещё узнал грандиозную фишку, что по аттрибуту ID можно легко получать доступ к узлу без его поиска:

r = new XML ("<SITE><main id='0' name='a'/> <main id='news' name='b'> <test id='pop' name='test'/></main> <main id='pop2' name='c'/> </SITE>");
q= r['news']

просто указать в кавычках ID - и FLASH сам найдет это узел. Только должон быть уникальный, иначе найдет последний.

--------------

AntonioBanderaz

Этот код:

Код

myTestXML = new XML();
testN = myTestXML.createElement('test');
testN.attributes.attr = 'testAtrib';
myTestXML.appendChild(testN);


легче записать так ( вместе с доступом к аттрибуту и):

Код

myTestXML = new XML ("<test attr='testAtrib'/>").firstChild    // создание XML 
myTestXML.attributes['attr']="newdata"                  // изменение  аттрибута 
myTestXML.attributes['newattr']="data"        // добавление нового аттрибута


и одиночные и двойные кавычки для аттрибута - ему пофиг на самом деле.
Заметь, чтобы получить сразу первый узел XML - надо достать его firstChild

а вот так можно сделать по другому ( покрасивше и в стиле HTML ):

Код

q= new XML ("<test id='nod' attr='testAtrib'/>")    // создание XML 
q['nod'].attributes['attr']="newdata"                  // изменение  аттрибута 
q['nod'].attributes['newattr']="data"        // добавление нового аттрибута


Вообщем XML - это ультра клево и легко smile
PM MAIL   Вверх
AntonioBanderaz
Дата 28.8.2005, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Ну это то понятно, что массив, я теде ведь это в коде указывал...
Просто не подумал...


Цитата
Заметь, чтобы получить сразу первый узел XML - надо достать его firstChild


myTestXML = new XML();
testN = myTestXML.createElement('test'); //Ну тут типо внимательно посмотри.... Вроде, testN - ссылка на test smile
testN.attributes.attr = 'testAtrib';
myTestXML.appendChild(testN);

А что проще записывать как Ты показал, я не согласен... Я во Flash'e не создаю XML, а парсю и пользую... Очень редко когда надо создать какую-нидь запись, а если надо, так не отдельно от общей, а если писать как Ты напсал, то у тебя твой новый XML будет в другой переменной, и Те их объединять нуна... appendChild'ом. Во как задвинул...

И кстатя, а ты про appendChild(); не забывал случаем.... вроде забыл....




--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AlDev
Дата 28.8.2005, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 9
Всего: 50



я как-то писал уже один класс...
com.batsuev.utils.XMLUtils



Цитата(PROCESSOR @ 27.8.2005, 12:01)
uncition set(q){
z=eval ("object.attributes."+q)
z="eee"
}

функция получает имя аттрибута ("name" ) как string > q="name"
object - ссылка на XML обьект ( тег этот . можно увидеть при trace (object) )
короче неработает. Походу в z - записывается не ссылка на этот аттрибут, а его значение . Поэтому неработает.

object.attributes.q ="eee" тоже не получается ( он не определяет Q как переменную, а думает, что это имя аттрибута )

Как мне в такой ситуации изменить значение этого аттрибута ?

attributes - это Object. Вот от этого и исходи.

Цитата(PROCESSOR @ 27.8.2005, 12:01)
Также почему-то не работает:

q="function set(){ object.attributes."+q+"='eee' } "
eval(q)
set()

переменной-то присвоить eval(q) не пробовал? ну и потом trace посмотреть?
Цитата(PROCESSOR @ 27.8.2005, 12:01)
funcition set(q){
z=eval ("object.attributes."+q)
z="eee"
}

код бессмысленный, ты сначала пытаешься присвоить переменной значение из аттрибута, а не ссылку на сам аттрибут, а потом присваеваешь ей и String.

Цитата(AntonioBanderaz @ 27.8.2005, 20:40)
Да, кстати, чтобы работало во Flash, надо ставить одинарные ковычки в значениях атрибутов... Х/З почему...

непонял? почему? пример.

Цитата(PROCESSOR @ 28.8.2005, 09:25)
оказывается, аттрибуты - это массив простой. чтоб достать аттрибут или установитьь:


это не массив, а объект.

PM MAIL WWW ICQ YIM MSN   Вверх
AntonioBanderaz
Дата 28.8.2005, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



На счёт одинарных ковычек, я это MX, где-то прочёл, что лучше их пользовать, вот и пользую.... =)))

На счёт твоих классов, по мне так, если их использовать, например для ошень маленького проекта, нафига...


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AlDev
Дата 28.8.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 9
Всего: 50



Цитата(AntonioBanderaz @ 28.8.2005, 21:38)
На счёт одинарных ковычек, я это MX, где-то прочёл, что лучше их пользовать, вот и пользую.... =)))

xml всё в двойные сам по себе перегоняет. А на самом деле пофиг, какие кавычки во Flash. String есть String smile

Цитата(AntonioBanderaz @ 28.8.2005, 21:38)
На счёт твоих классов, по мне так, если их использовать, например для ошень маленького проекта, нафига...

для очень маленького их можно, пардон, маленько кастрировать smile
просто гораздо проще просто юзать готовый класс, чем писать всё с нуля...
PM MAIL WWW ICQ YIM MSN   Вверх
AntonioBanderaz
Дата 28.8.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Майкл Гуровиц, Лора Мак-Кейб - Использование Flash MX... 2003г. ---- Вот здесь я и прочёл про одинарные ковычки... =) На самом деле всё равно, я уже попробовал....
Добавлено @ 17:32
Согласен =) Щас сам пишу, для unsirialize XML... Без ООП уже никуда.... А как всё начиналось, функции, переменные, никаких тебе классов.... smile smile smile


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AlDev
Дата 28.8.2005, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 9
Всего: 50



Цитата(AntonioBanderaz @ 28.8.2005, 22:23)
Согласен =) Щас сам пишу, для unsirialize XML... Без ООП уже никуда.... А как всё начиналось, функции, переменные, никаких тебе классов....

как только код переваливает за несколько метров... начинаешь понимать, что без классов ты-бы просто повешался )

как напишешь, показывай )
PM MAIL WWW ICQ YIM MSN   Вверх
AntonioBanderaz
Дата 29.8.2005, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



PROCESSOR
Цитата

а вот так можно сделать по другому ( покрасивше и в стиле HTML ):....


любишь по красивше...

Код

q=new XML ("<test id='nod' attr='testAtrib'/>");
q.lastChild.attributes.attr = "траля-ля";


Через lastChild нет таких громадных конструкций типо q.childNodes[0]. ... childNodes[n].attributes['newattr']="data";
А что Ты указываешь id тратится время на поиск узла XML... Да и не всегда у тебя id будет известен...

id - индефикатор узла...
Добавлено @ 03:09
Цитата(Alex @ 28.8.2005, 14:50)


Цитата (PROCESSOR @ 28.8.2005, 09:25)
оказывается, аттрибуты - это массив простой. чтоб достать аттрибут или установить:

это не массив, а объект.



Массив в typeof'е тебе object выдаст... Недавно узнал, так, что это тоже своего рода объект... Да и чисто внешни к ним доступ похож...




--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AlDev
Дата 29.8.2005, 03:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 9
Всего: 50



Цитата(AntonioBanderaz @ 29.8.2005, 08:03)
Массив в typeof'е тебе object выдаст... Недавно узнал, так, что это тоже своего рода объект... Да и чисто внешни к ним доступ похож...

это-же объектно-ориентированый язык. тут всё наследует от object-а.
PM MAIL WWW ICQ YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Flash"
AlDev
SoWa
  • Если вы хотите предложить кому-либо работу, то пишите или в личку, или оставляйте сообщения в специально предназначеном для этого форуме "Объявления о найме специалистов"
  • Один вопрос - одна тема. Не надо переходов от одного вопроса к другому.
  • Если вы хотите показать какой-нибудь ваш мульт, причём показать, а не предоставить исходник, то вам сюда
  • Вопросы про программирование на ActionScript 1,2 (Flash 8 и более ранние версии) пишите в форуме ActionScript 1,2
  • Вопросы по разработке интернет-приложений на Flex и вопросы по MXML пишите в раздел Flex
  • Смотрим в будущее. ActionScript 3 обсуждается в форуме ActionScript 3
  • Новости из мира Flash.
  • New! [code=ascript][/code] - подсветка ActionScript + wikipedia help

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, AlDev, SoWa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Flash | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.