修改现有XML而不影响AS3 Air应用程序的其他数据
我正在使用ActionScript 3 AIR桌面应用程序,该应用程序需要将数据保存为用户的修改现有XML而不影响AS3 Air应用程序的其他数据,xml,flash,actionscript-3,Xml,Flash,Actionscript 3,我正在使用ActionScript 3 AIR桌面应用程序,该应用程序需要将数据保存为用户的C:\驱动器中的XML文件,以便能够在重新打开后再次读取保存的数据 保存过程很好,当我尝试重新打开应用程序并尝试覆盖旧值时,会出现问题,除了新值之外,保存的所有数据都会被删除 我知道发生错误的原因(根据我的代码),但我找不到任何解决此问题的方法。我希望用户能够重新打开应用程序并检索其旧数据,如果他应该覆盖现有数据条目,则只有特定条目数据被覆盖,而不是整个数据 这是我的代码(在找到解决方案后更新): 导入f
C:\
驱动器中的XML文件,以便能够在重新打开后再次读取保存的数据
保存过程很好,当我尝试重新打开应用程序并尝试覆盖旧值时,会出现问题,除了新值之外,保存的所有数据都会被删除
我知道发生错误的原因(根据我的代码),但我找不到任何解决此问题的方法。我希望用户能够重新打开应用程序并检索其旧数据,如果他应该覆盖现有数据条目,则只有特定条目数据被覆盖,而不是整个数据
这是我的代码(在找到解决方案后更新):
导入flash.net.URLRequest;
导入flash.net.urloader;
导入flash.events.Event;
导入flash.display.Loader;
导入flash.events.MouseEvent;
导入flash.filesystem.File;
导入flash.filesystem.FileStream;
导入flash.filesystem.FileMode;
导入flash.utils.Timer;
导入flash.events.TimerEvent;
var selfEvaluationLoader:URLLoader=新URLLoader();
var answersLoader:urloader=newurloader();
var imgLoader=new Loader();
var-SEXML:XML;
var-loadedXML:XML;
var SECounter=1;
变量度:数组=新数组();
var saveDegree:Array=new Array();
var letterArr:Array=新数组(“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“j”、“k”、“l”、“m”、“o”)
var-savedXML:XML;
var saveFlag=true;
var文件:文件;
var fileStream:fileStream;
var-flag1:字符串;
nextSE.buttonMode=true;
nextSE.addEventListener(MouseEvent.CLICK,nextQuestion);
load(新的URLRequest(“selfEval.xml”);
selfEvaluationLoader.addEventListener(Event.COMPLETE,processsXML);
对于(var b=1;b的副本:。请删除其中一个。如果您希望更新任何详细信息,也可以编辑您的问题。@VC.one重复的问题将被删除。我通过使用xml对象的.replace函数+1查找自己的解决方案找到了答案。您应该发布有关的信息。替换函数作为答案,since它对您有效。可能会帮助到其他人。谢谢!解决方案非常简单。每次我再次打开该文件时,我都在创建XML文件,实际上它所需要的只是使用。exist
函数检查XML文件是否存在。如果存在XML文件,该函数将返回true;如果没有,则返回false。因此,如果条件为true,则这意味着有一个XML文件,它所需要的只是使用.replace
函数更新它,如下所示:savedXML.replace(SECounter-1,{degree[SECounter-1]})
问题用解决方案更新
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 is "+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();
}