Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Преобразование xml-файлов (http://www.flasher.ru/forum/showthread.php?t=208885)

AlexAS3 15.09.2014 17:20

Преобразование xml-файлов
 
Доброе время суток!
Хотелось бы узнать, как в ActionScript 3.0 наиболее простым способом можно сделать преобразование xml файлов?
А именно, надо сделать, чтобы внутри каждого xml файла эти строки:
Код:

<Account>42301810363229727150</Account>
<Op_Date>01.04.1994</Op_Date>
<Balance>151.12</Balance>

преобразовывались в:
Код:

<Data>
  <ACC>
    <External_Key>45356</External_Key>
    <Account>42301810363229727150</Account>
    <Op_Date>01.04.1994</Op_Date>
    <Balance>151.12</Balance>
  </ACC>
</Data>

Какие функции есть для преобразования? И кто-нибудь с таким сталкивался? Возможно ли это сделать на ActionScript во Flash Builder?
Заранее спасибо )

nubideus 15.09.2014 18:22

Цитата:

<External_Key>45356</External_Key>
это рандом?

Цитата:

Какие функции есть для преобразования? И кто-нибудь с таким сталкивался? Возможно ли это сделать на ActionScript во Flash Builder?
аутизм

Cyclopoper 15.09.2014 18:22

Написать свой парсер.

В данном случае вы просто к началу и к концу строки прибавляете "<Data><ACC>" и "</ACC></Data>" соответственно.

AlexAS3 15.09.2014 18:44

Цитата:

Сообщение от Cyclopoper (Сообщение 1172008)
В данном случае вы просто к началу и к концу строки прибавляете "<Data><ACC>" и "</ACC></Data>" соответственно.

Дело в том, что таких записей много, и они внутри других, которые менять не надо.

<External_Key>45356</External_Key> - можно счетчик, можно рандом, но надо добавлять будет.

RAlfDog 15.09.2014 19:10

Если архитектура всегда такая
Код:

<Account>42301810363229727150</Account>
<Op_Date>01.04.1994</Op_Date>
<Balance>151.12</Balance>

и неизменна, то можно просто:
Код:

var XMLStr:String = "ТЕКСТ ВАШЕГО XML-ФАЙЛА";
var External_Key:Number = 45356;

XMLStr = XMLStr.split("<Account>").join("<Data><ACC><External_Key>" + External_Key + "</External_Key><Account>");
XMLStr = XMLStr.split("</Balance>").join("</Balance></ACC></Data>");

Если External_Key неизменный (ну т.е. будет одно значение во всех объектах "<ACC>")

silin 15.09.2014 20:48

Код AS3:

var src:XML =
<root>
        <Account>42301810363229727150</Account>
        <Op_Date>01.04.1994</Op_Date>
        <Balance>151.12</Balance>
</root>
 
var key:int = 1000 * Math.random();
var res:XML =<Data><ACC><External_Key>{key}</External_Key></ACC></Data>;
for each(var node:XML in src.*)
{
        res.ACC.appendChild(node);
 
}
 
trace( "src : " + src.toXMLString() );
trace( "res : " + res .toXMLString());


AlexAS3 17.09.2014 13:54

Спасибо, с преобразованием ХМЛ файла более менее понятно. Но теперь никак не могу сделать, чтобы файл сохранялся на диск C. Использовал пример с этого форума:

var file:File = File.desktopDirectory.resolvePath("C:\\1\save1.xml");
var fileStream:FileStream = new FileStream(); // создаем поток
fileStream.open(file, FileMode.WRITE); // открываем файл в режиме записи
fileStream.writeMultiByte(str, "Windows-1251"); // сохраняем эту строку
fileStream.close(); // закрываем поток

Но файл не создается в этой директории (а также директория тоже не создается). А если Flash Builder запускать не под администратором, то вообще ошибка выходит.

как оказалось, создается файл на диске C с именем 1save1.xml, но мне надо, чтобы директория создавалась.

Работает только сохранение на рабочий стол: var file:File = File.desktopDirectory.resolvePath("savedfile1.xml");
Но мне надо много файлов сохранять, рабочий стол не подходит для этого...
Может, кто-нибудь знает, как сохранить файл на диск?

Котяра 17.09.2014 17:57

Цитата:

File.appStorageDirectory
Позволяет сохранять файлы без спроса юзера. Обычно там сохраняются всякие настройки и конфиги air приложения.
Если файлы нужны будут самому юзеру, используйте
Код AS1/AS2:

File.browseForDirectory

, чтобы юзер сам выбрал директорию в которой можно сохранять.

AlexAS3 17.09.2014 18:36

Котяра, мне надо сохранять очень много фалов, каждый раз выбирать пользователю - это долго.

Но я, кажется, разобрался - надо было написать так: C://1/save1.xml и запустить под администратором.
Сейчас директория создалась.

illuzor 17.09.2014 18:41

Код AS3:

fileStream.writeMultiByte(str, "Windows-1251");

21й век на дворе. Используйте utf-8.


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

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