wtorek, 8 listopada 2011

zapisywanie XML z kodu

Już wiemy jak zrobić XML'a z wartości obiektów które mamy. Teraz czas go zapisać.
Przedstawiam tę o to prostą klasę. Wywołujemy ją prosto:
createXML.addToXML(TablicaObiektow);

Nasza klasa, po stworzeniu XML'a (nazwy nodów można pozmieniać), wywoła metodę fileReference, która otwiera standardowe okno zapisu pliku. Problemem może być brak możliwości ustalenia domyślnego rozszerzenia dla zapisywanego pliku... cóż taki ficzer.
Bug siedzi na tablicy u Adobe od jakiegoś czasu i czeka na poprawkę.

A oto i klasa:


 package  
 {  
   import flash.display.Sprite;  
   import flash.events.Event;  
   import flash.events.MouseEvent;  
   import flash.utils.ByteArray;  
   import flash.net.FileReference;  
   import flash.net.FileFilter;  
 /**  
  * ...  
  * @author michalSqa(michal@skula.com);  
  */  
    public class createXML extends Sprite   
    {  
     private static var _xml:XML;  
     public function createXML():void   
     {  
     }  
       public static function addToXML(objectsArray:Array):void  
       {  
          _xml = <xml></xml>;  
          for(var object:Object in objectsArray)  
          {  
             //trace("object: "+object);  
             var obj:Object = objectsArray[object];  
             var item:XML = <item />  
             for(var id:String in obj)   
             {  
                trace("id: "+id);  
                var value:Object = obj[id];  
                //trace(id + " = " + value);  
               item.@[id] = value  
             }  
             _xml.appendChild(item);  
          }  
          trace(_xml);  
          _saveXML();  
       }  
     private static function _saveXML():void  
     {  
         var ba:ByteArray = new ByteArray();  
         ba.writeUTFBytes(_xml);  
         var fr:FileReference = new FileReference();              
         fr.addEventListener(Event.SELECT, _onRefSelect);  
         fr.addEventListener(Event.CANCEL, _onRefCancel); //   
         fr.save(ba, "filename.xml"); // wywołuje okno zapisu pliku  
     }  
     private static function _onRefSelect(e:Event):void  
     {  
         trace('select');  
     }  
     private static function _onRefCancel(e:Event):void  
     {  
         trace('cancel');  
     }  
    }  
 }  

Brak komentarzy:

Prześlij komentarz