Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.04.2011, 05:15
gavrick вне форума Посмотреть профиль Отправить личное сообщение для gavrick Найти все сообщения от gavrick
  № 1  
Ответить с цитированием
gavrick

Регистрация: Apr 2011
Сообщений: 1
По умолчанию Редактирование xml файла

Добрый вечер.
Ребята - какой уже вечер мучаюсь не могу придумать.
Есть большой XML файл для управления станком. Нужно сделать интерфейс на флеше для редактирования значений (их около 300).
Хочу сделать автоматом (чтобы цикл перебирал все поле+значение, создавал кнопки для редактирования), но в разных частях файла разная вложенность. Никак не получается. Может кто подскажет.

Старый 16.04.2011, 19:51
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 2  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Написал простенький недопарсер на коленке.
Идея в том, что нам нужно представить одни и те же данные в другом виде.

Первая часть задачи состоит в том, чтобы разобрать xml. Разбираем рекурсивно, от родителя к ребенку. Для каждого xml Выводим необходимый вид.

Вторая часть заключается в том, чтобы отобразить то, что мы попарсили. Я тут ограничился тем, что в качестве вида возвращаю строку, а вы можете у себя в редакторе вернуть, например, DisplayObjectContainer со всякими кнопочками и текстфилдами.

Код AS3:
var xml:XML = 
<data>
  <hello id="world">
    <world att="dwaw"></world>
  </hello>
  <some>text</some>
</data>
 
traceCurrentNode(xml);
 
/**
 * Рекурсивно проходит по xml, создавая для каждого встреченного нода альтернативное отображение
 * @param node xml, который хотим отобразить
 * @param depth глубина, на которой находится текущий xml. Служит для правильного отображения иерархии
 */
public function traceCurrentNode(node:XML, depth:int = 0):void {
	var atts:XMLList = node.attributes()
	var str:String = '';
 
        // создаем отступ, чтобы видеть глубину вложенности
	for(var i:int = 0; i < depth; i++) {
		str +='   ';
	}
 
        // вывели отображение текщей xml
	trace(str, getParsedResultByXml(node));
 
        // если есть вложенный xml
	if(node.hasComplexContent()) {
 
                // для каждого из вложенных детей вызываем эту же функцию.
		for each(var x:XML in node.children()) {
			traceCurrentNode(x, depth+1);
		}
	}
}
 
/**
 * Формирует строку на основе переданного xml
 * @param xml 
 */
private function getParsedResultByXml(xml:XML):String {
	var result:String = '{';
	result += xml.name();
 
        // достаем аттрибуты и вписываем их имена-значения в строку
	for each(var aXml:XML in xml.attributes()) {
		result += ' @'+aXml.name() + ':'+'\&quot;'+aXml.valueOf()+'\&quot;';
	}
 
        // если есть вложенный xml
	if(xml.hasComplexContent()) {
		result += '}';
	} // если есть текст
        else if(xml.valueOf().toString().length > 0  ){
		result += '}';
		result += xml.valueOf();
		result += '{/' +xml.name()+ '}';
	} // если пустой нод
        else {
                result +=' /}';
        }
 
	return result;
}
__________________
#flasher@irc.trg.ru:6667


Последний раз редактировалось Obi; 16.04.2011 в 19:58.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:12.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.