actionscript 3 - Modify an existing XML without affecting the other data for AS3 Air application -


i working on actionscript 3 air desktop application requires save data xml file in user's c:\ drive, in order able read data saved again after re-opening.

the saving process fine, problem arises when try re-open application , try override old value, the whole data saved removed except new value.

i know why error occurred (based on code), can not find work around solving problem. want user able re-open application , retrieve old data, , if should overwrite existing data entry specific entry data overwritten, not whole data.

here code (it updated after found solution):

import flash.net.urlrequest; import flash.net.urlloader; import flash.events.event; import flash.display.loader; import flash.events.mouseevent; import flash.filesystem.file; import flash.filesystem.filestream; import flash.filesystem.filemode; import flash.utils.timer; import flash.events.timerevent;  var selfevaluationloader:urlloader = new urlloader(); var answersloader:urlloader = new urlloader(); var imgloader = new loader(); var sexml:xml; var loadedxml:xml; var secounter = 1; var degree:array = new array(); var savedegree:array = new array(); var letterarr:array = new array("a","b","c","d","e","f","g","h","i","j","k","l","m","o") var savedxml:xml; var saveflag=true; var file:file; var filestream:filestream; var flag1:string;  nextse.buttonmode = true; nextse.addeventlistener(mouseevent.click,nextquestion); selfevaluationloader.load(new urlrequest("selfeval.xml")); selfevaluationloader.addeventlistener(event.complete,processsexml); for(var b=1;b<5;b++)     {         seanswer["rb"+b].addeventlistener(mouseevent.click,saveanswer);     }  function processsexml(e:event) {     sexml = new xml(e.target.data);     imgloader.load(new urlrequest(sexml.question.(@id==1).img.children()));     addchild(imgloader);     //imgloader.visible=false; }  function nextquestion(e:mouseevent) {     secounter++;     if(secounter == 15)     {         texts.alpha=1;         nextse.enabled=false;         prevse.enabled=false;         answersloader.load(new urlrequest("c:/users/safwat/my documents/xml/savedegree.xml"));         answersloader.addeventlistener(event.complete,loaddatafromc);     }     else     {         prevse.enabled = true;         prevse.buttonmode = true;         prevse.addeventlistener(mouseevent.click,prevquestion);         seanswer["hiddenrb"].selected = true;         imgloader.load(new urlrequest(sexml.question.(@id==secounter).img.children()));         addchild(imgloader);     } } function prevquestion(e:mouseevent) {     secounter--;     switch(flag1)     {         case "rb1":         seanswer["rb1"].rb1.selected = true;         break;         case "rb2":         seanswer["rb2"].rb2.selected = true;         break;         case "rb3":         seanswer["rb3"].rb3.selected = true;         break;         case "rb4":         seanswer["rb4"].rb4.selected = true;         break;         default:         seanswer["hiddenrb"].selected = true;     }     if(secounter == 1)     {         nextse.enabled=false;         prevse.enabled=false;     }     else     {         nextse.enabled = true;         //seanswer["hiddenrb"].selected = true;         imgloader.load(new urlrequest(sexml.question.(@id==secounter).img.children()));         addchild(imgloader);     } } function saveanswer(e:mouseevent) {     degree[secounter-1]=string(e.currenttarget.name);     flag1=e.currenttarget.name;     trace("flag1 "+flag1)     onanswer(); } function onanswer() {     file = file.documentsdirectory.resolvepath("xml/savedegree.xml");     if(file.exists && saveflag==true)     {     trace("here")     answersloader.load(new urlrequest("c:/users/safwat/my documents/xml/savedegree.xml"));     answersloader.addeventlistener(event.complete,retrievesaveddata);     }     else     {     saveflag=false;     trace("not existed")     var filestream:filestream = new filestream();     filestream.open(file, filemode.write);     filestream.writemultibyte('<?xml version="1.0" encoding="utf-8"?>'+'\n'+'<questions>', "iso-8859-01");     for(var kk=0;kk<14;kk++)     filestream.writemultibyte('<question>'+degree[kk]+'</question>', "iso-8859-01");     filestream.writemultibyte('\n'+'</questions>', "iso-8859-01");     filestream.close();     } } function loaddatafromc(e:event) {     nextse.enabled=false;     prevse.enabled=false;     loadedxml = new xml(e.target.data);     seanswer.alpha=0;     for(var b=1;b<5;b++)     {         seanswer["rb"+b].removeeventlistener(mouseevent.click,saveanswer);     }     for(var d=0;d<14;d++)     {     switch(string(loadedxml.question[d]))     {         case "rb1":         texts[letterarr[d]+"1"].gotoandstop(2);         break;         case "rb2":         texts[letterarr[d]+"2"].gotoandstop(2);         break;         case "rb3":         texts[letterarr[d]+"3"].gotoandstop(2);         break;         case "rb4":         texts[letterarr[d]+"4"].gotoandstop(2);         break;     }     }     if(secounter==14)     {         texts.alpha=1;         answersloader.load(new urlrequest("c:/users/safwat/my documents/xml/savedegree.xml"))         answersloader.addeventlistener(event.complete,loaddatafromc)     } } function retrievesaveddata(e:event) {     savedxml = new xml(e.target.data);     savedxml.replace(secounter-1,<question>{degree[secounter-1]}</question>)     filestream = new filestream();      var timer:timer = new timer(100, 1);     timer.addeventlistener(timerevent.timer_complete,timedsave);     timer.start(); } function timedsave(e:timerevent) {     filestream.open(file, filemode.write);     filestream.writemultibyte('<?xml version="1.0" encoding="utf-8"?>'+'\n', "iso-8859-01");     filestream.writemultibyte(savedxml, "iso-8859-01");     filestream.close(); } 


Comments