I've just (well, 3:00 am this morning) got XML saving and re-reading back in. I played it safe and .toString()'d it before save but it'll probably work without it.
here's the whole of my fetching of data, inc the getting and saving of the XML as an LocalSO. I hope it helps you. cheers b (PS: if you see any dodgy coding and can offer advice pls do.) <mx:Script> <![CDATA[ public var localSO:SharedObject = SharedObject.getLocal("lsoQuestionaire"); public function init():void { //localSO.data.saveDate = new Date(); // testing only ExternalInterface.addCallback("onBrowserClose", onBrowserClose); trace("init called"); if (localSO.size) { Alert.yesLabel = "Use Previous Session"; Alert.noLabel = "Replace With New Session"; Alert.buttonWidth = 150; Alert.show("You have a previous session. Would you like to load it?","Questionaire Session Selection",Alert.YES|Alert.NO,this, onChoseSession); } else { getNewSession() } // that gets the data, now lets set up the persist } public function onChoseSession(event:CloseEvent):void { if (event.detail == Alert.YES) { loadPreviousSession(); } else { getNewSession(); } } public function getNewSession():void { xmlRequest.url = xmlLocation; xmlRequest.method = "GET"; xmlRequest.resultFormat = "e4x"; xmlRequest.addEventListener(ResultEvent.RESULT,onResultReturn); xmlRequest.addEventListener(FaultEvent.FAULT, onResultFault); trace("5. requesting XML now from " + xmlLocation); xmlRequest.send(); } public function loadPreviousSession():void { // get XML from Local Shared Object trace("1. loadPreviousSession called"); try { questionaire = new XML(localSO.data.questionaire); trace("2. got data"); trace(questionaire.toXMLString()); } catch(e:Error) { trace("3. error on loadPreviousSession"); trace(e.message.toString()); trace("4. go to getNewSession()"); getNewSession(); } } public function onResultReturn(event:ResultEvent):void { trace("6. onResultReturn called"); questionaire = new XML(event.result); trace(questionaire.toXMLString()); lastIndex = questionaire.section.subsection.children().length()-1; // zero-based index/arrays! first(); // move to the first question to start } public function onResultFault(event:FaultEvent):void { trace("7. onResultFault called:" + event.toString()) mx.controls.Alert("ERROR: Could not load XML questions"); } private function onBrowserClose():void { Alert.show("browser is closing"); localSO.data.questionaire = questionaire.toXMLString(); } ]]> </mx:Script>