我似乎无法让我的xml在节点内生成。它每次都重复整个xml结构。用例是该文件将在数小时/天内重复更新。这个xml文件也连接到后端,因此我必须保持这种格式。
目前xml最终看起来像这样:
<xmlcontainer>
<details>
<name>name</name>
<phone>phone</phone>
<email>email</email>
<image>0</image>
<image>1</image>
</details>
</xmlcontainer><xmlcontainer>
<details>
<name>name2</name>
<phone>phone2</phone>
<email>email2</email>
<image>3</image>
<image>4</image>
</details>
</xmlcontainer>
它应该是这样的。
<xmlcontainer>
<details>
<name>name</name>
<phone>phone</phone>
<email>email</email>
<image>0</image>
<image>1</image>
</details>
<details>
<name>name2</name>
<phone>phone2</phone>
<email>email2</email>
<image>3</image>
<image>4</image>
</details>
</xmlcontainer>
下面是我的代码,跨越2帧。我错过了什么才能实现这一目标? 我搞砸了fs.open(fl2,FileMode.APPEND);和fs.open(fl2,FileMode.WRITE);但它似乎没有什么大不同。
感谢
//frame 2
var xml_file = File.documentsDirectory.resolvePath('app/information.xml').nativePath;
var xml_created = false;
var xml_data = "";
function load_xml(f_name){
var target_url:URLRequest = new URLRequest(f_name);
var target_load:URLLoader= new URLLoader();
var xmlData : XML = new XML();
target_load.load(target_url);
target_load.addEventListener(Event.COMPLETE, target_complete);
target_load.addEventListener(IOErrorEvent.IO_ERROR, target_error);
function target_complete (evt:Event):void {
xmlData = new XML(evt.target.data);
xml_created = true;
xml_data = String(xmlData.details);
nextFrame();
trace("OK - load XML")
}
function target_error(evt:IOErrorEvent):void {
nextFrame();
trace("ERROR - load xml - check xml file name");
}
}
load_xml(xml_file);
//frame 5
function saveFiles_fun (){
var xmlData:XML = new XML(<xmlcontainer>
</xmlcontainer>
);
var details:XML = new XML(<details/>)
//client.appendChild(<id/>);
details.appendChild( new XML( "<name>qwe</name>" ));
details.appendChild( new XML( "<phone>qwe</phone>" ));
details.appendChild( new XML( "<email>qwe</email>" ));
for (var fna:int = 0; fna<fileNameArray.length; fna++) {
details.appendChild( new XML( "<image>" + fna + "</image>" ));
}
xmlData.appendChild(details);
var fl1:File = File.applicationDirectory.resolvePath(xml_file);
var fl2:File = new File( fl1.nativePath );
var fs:FileStream = new FileStream();
try{
fs.open(fl2,FileMode.APPEND);
fs.writeUTFBytes(xmlData);
fs.close();
doSomething();
}catch(e:Error){}
}
function doSomething(){
form.alert.text = alert4;
var _tim5 = setTimeout(gotoAndPlay, 1000,1);
}
答案 0 :(得分:1)
我认为你的问题就在于这一行。
fs.open(fl2,FileMode.APPEND);
为什么不只是完全重新创建文件然后将其写入现有文件?
FileMode.APPEND
指定文件已打开以进行追加。如果是,则创建该文件 它不存在。如果文件存在,则不存在现有数据 覆盖,所有写作都从文件末尾开始。
您需要使用的是
FileMode.WRITE
您也不应该嵌套您的功能,如果您将其作为一种常见做法,这将导致问题。
[UPDATE]
// in the code you supplied find this line
xmlData.appendChild(details);
// and right above it add this line
xmlData.appendChild(xml_data);
// so the resulting code will look like this
xmlData.appendChild(xml_data); // xml_data is where the original document is stored
xmlData.appendChild(details);
// also include the change to
fs.open(fl2,FileMode.WRITE);
答案 1 :(得分:0)
你的&#34; saveFiles_fun&#34;方法被调用?我想您正在使用此代码段创建一个新的XML实例
var xmlData:XML =新XML( );
然后你要添加childXML。