2009-06-03 12 views
8
var xml:XML = <myXml> 
        <item prop="1" /> 
        <item prop="2" /> 
       </myXml>; 

मुझे स्थानीय हार्डडिस्क (प्रोजेक्ट निर्देशिका) में xml फ़ाइल के रूप में सहेजने की आवश्यकता है।AS3 में XML फ़ाइल सहेजना संभव है

क्या यह एएस 3 में ही सहेजना संभव है?

+0

आपका प्रश्न बहुत स्पष्ट नहीं था, लेकिन जवाब सिर्फ वही था जो मुझे चाहिए था। धन्यवाद! –

उत्तर

3

यदि आप इसे स्थानीय रूप से (क्लाइंट पीसी पर) स्टोर करना चाहते हैं, तो आप स्थानीय साझा ऑब्जेक्ट का उपयोग कर सकते हैं। इस tutorial

+0

अच्छा! मुझे जिस चीज की जरूरत थी। – mheavers

1

मुझे खेद है, आपका प्रश्न बहुत स्पष्ट नहीं है।

क्या आप पूछ रहे हैं कि क्या आप एएस 3 में लिखे गए संकलन एसडब्ल्यूएफ के भीतर से हार्ड ड्राइव में फ़ाइल सहेज सकते हैं?

या आप पूछ रहे हैं कि क्या आप अपने एएस 3 प्रोजेक्ट में एक कच्ची एक्सएमएल फ़ाइल को एक चर के रूप में लिखने की आवश्यकता के बिना शामिल कर सकते हैं?

यदि आप पूर्व का मतलब था, नहीं - एडोब एयर के बिना नहीं। आप स्थानीय रूप से साझा ऑब्जेक्ट के रूप में डेटा को सहेज सकते हैं, लेकिन फ़ाइल सिस्टम में मनमानी फ़ाइल के रूप में नहीं।

यदि बाद वाला, तो हाँ - आपको फ़ाइल को एम्बेड करना होगा जैसे कि आप एक और संसाधन (जैसे छवि या ध्वनि) एम्बेड करेंगे। हालांकि, ऐसा लगता है कि फ्लैश में एक बग हो सकती है जो यह जानने के लिए गैर-तुच्छ बनाता है कि कैसे करना है।

This link might be of help to you.

[Embed(source='../../../../assets/levels/test.xml', mimeType="application/octet-stream")] 
public static const Level_Test:Class; 

और फिर XML को पार्स करने:

var ba:ByteArray = (new Levels.Level_Test()) as ByteArray; 
var s:String = ba.readUTFBytes(ba.length); 
xml = new XML(s); 

क्षमा याचना करता है, तो उन सवालों का न तो क्या आप वास्तव में पूछ रहे थे कर रहे हैं।

चीयर्स!

17

मैंने इसे एक साथ फेंक दिया, और सुनिश्चित करें कि आप कम से कम उदाहरण के रूप में निम्न का उपयोग कर .XML को सहेज सकते हैं।

package com.hodgedev.xmlcreator 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.utils.ByteArray; 
    import flash.net.FileReference; 

/** 
* ... 
* @author Brian Hodge ([email protected]) 
*/ 
public class Main extends Sprite 
{ 
    private var _xml:XML; 

    public function Main():void 
    { 
     if (stage) init(); 
     else addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

    private function init(e:Event = null):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, init); 

     //Calling the save method requires user interaction and Flash Player 10 
     stage.addEventListener(MouseEvent.MOUSE_DOWN, _onMouseDown); 

     _xml= <xml> 
       <test>data</test> 
       </xml>; 
    } 
    private function _onMouseDown(e:MouseEvent):void 
    { 
     var ba:ByteArray = new ByteArray(); 
     ba.writeUTFBytes(_xml); 
     //ba. 

     var fr:FileReference = new FileReference(); 
     fr.addEventListener(Event.SELECT, _onRefSelect); 
     fr.addEventListener(Event.CANCEL, _onRefCancel); 

     fr.save(ba, "filename.xml"); 
    } 
    private function _onRefSelect(e:Event):void 
    { 
     trace('select'); 
    } 
    private function _onRefCancel(e:Event):void 
    { 
     trace('cancel'); 
    } 
} 

}

कुछ बातों का ध्यान रखना।

  • आपको फ़्लैश प्लेयर 10 को FileReference कक्षा की सहेजने विधि का उपयोग करने की आवश्यकता है।
  • किसी भी चीज को करने के लिए जो एक संकेत देता है, फ्लैश को कीबोर्ड या माउस इनपुट जैसे उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है।
ऊपर मैं उपयोगकर्ता बातचीत जो शीघ्र बचाने के आह्वान करने के लिए आवश्यक है के रूप में सेवा करने के लिए मंच पर MouseEvent.MOUSE_DOWN के लिए सुनने में

मैं सेटअप कोड के भीतर एक बुनियादी XML संरचना (यह आम तौर पर और बाहरी स्रोत से आ जाएगा और ठीक दोनों तरीकों से काम करेंगे।

एक ByteArray बनाई गई है और एक्सएमएल ByteArray लिखा है।

FileReference कक्षा की सहेजने की विधि को ByteArray और डिफ़ॉल्ट सहेजने वाले नाम को दो पैरामीटर के रूप में पारित किया जाना आवश्यक है।

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

मुझे पता है कि यह पोस्ट पुराना है, लेकिन यह वही जवाब है जिसे मुझे छोड़कर जरूरी है, एक लूप का उपयोग करके एक्सएमएल कैसे लिखें? जैसे मेरे पास 2 डी सरणी है जिसमें बनावट का डेटा है। मैं बनावट एक्सएमएल मानचित्र के आधार पर टकराव एक्सएमएल मानचित्र बनाना चाहता हूं। पसंद है, आप कैसे करते हैं: 'var xml: XML = /* लूप के लिए */'? – DevITper

+0

वास्तविक एक्सएमएल बनाने के लिए लूप के लिए उपयोग करें, फिर उसे भेजें! var s: स्ट्रिंग; // यदि आप चाहें तो निम्न को छोड़ दें, फ्लैश इसका उपयोग नहीं करता है, लेकिन अगर फ़ाइल को फ्रंट और बैकएंड के बीच साझा किया जाता है, तो आप वह टैग प्राप्त कर सकते हैं। –

+1

एस = ""; s.appendText (""); // लूप के लिए स्वतंत्र महसूस करें कि आप कैसे चाहते हैं उदा। के लिए (var i: int; i ") के लिए प्रत्येक के लिए उपयोग करूंगा; } s.appendText (""); यह स्पष्ट रूप से सामान्य है, लेकिन आपको जाना चाहिए। var xml: XML = s; –

संबंधित मुद्दे