|
|
|
#1 |
|
Member
Join Date: Jan 2003
Location: Atlanta, USA
Posts: 30
|
FileMode.APPEND XML
Hi All,
I'm working on my first AIR1.5 app in Flash CS3/AS3. What I'm trying to do is "APPEND" an XML Node to the end of an XML doc. Starting XML: Code:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <galeria> <Photo imagem="casinha.jpg" legenda="Minha casa"/> <Photo imagem="familia.jpg" legenda="Família reunida"/> </galeria> Code:
var fl:File = File.desktopDirectory.resolvePath("air/testFile.xml");
var fs:FileStream = new FileStream();
fs.addEventListener(Event.COMPLETE, processXMLData);
fs.openAsync(fl, FileMode.READ);
var xml:XML;
//
function processXMLData(e:Event):void {
xml = XML(fs.readUTFBytes(fs.bytesAvailable));
testtext.text = xml;
writeXML();
}
function writeXML():void {
//fs.openAsync(fl, FileMode.WRITE);
fs.openAsync(fl, FileMode.APPEND);
var xmlNew = '<Photo imagem="NodeToBeAdded.jpg" legenda="Node to be added" />';
fs.writeUTFBytes(xmlNew);
testtext.text = xml;
fs.close();
}
Code:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <galeria> <Photo imagem="casinha.jpg" legenda="Minha casa"/> <Photo imagem="familia.jpg" legenda="Família reunida"/> </galeria><Photo imagem="NodeToBeAdded.jpg" legenda="Node to be added" /> Code:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<galeria>
<Photo imagem="casinha.jpg" legenda="Minha casa"/>
<Photo imagem="familia.jpg" legenda="Família reunida"/>
<Photo imagem="NodeToBeAdded.jpg" legenda="Node to be added" />
</galeria>
Thanks Scott Any help would be appreciated. |
|
|
|
|
|
#2 |
|
Member
Join Date: May 2009
Posts: 58
|
Well you'll have to change it to not use append mode and rewrite the entire file.
Code:
fs.openAsync(fl, FileMode.WRITE); xml += '<Photo imagem="NodeToBeAdded.jpg" legenda="Node to be added" />'; fs.writeUTFBytes(xml); fs.close(); |
|
|
|
|
|
#3 |
|
Pumpkin Carving 2008
Join Date: Apr 2006
Location: Grand Rapids MI
Posts: 2,135
|
I actually just had to do this for the first time last night. Your best bet is to use XML.appendChild() to the base XML, delete the xml file, and write the whole thing back to to file. Here's how I did it:
Code:
import flash.filesystem.*;
public class XMLEditor {
private var file:File = null;
private var fileStream:FileStream = null;
public var data:XML = null;
private var _drive:File;
private var _setdir:String = "C:\\test.xml";
public function XMLEditor(d:File) {
_drive = d;
open();
}
public function open() {
load();
var inXML = fileStream.readUTFBytes(fileStream.bytesAvailable);
if (inXML == "") {
fileStream.writeUTFBytes("<records>\r\n</records>");
fileStream.close();
load();
} else {
data = new XML(inXML);
}
}
public function load() {
file = _drive.resolvePath(_setdir);
fileStream = new FileStream();
fileStream.open(file, FileMode.UPDATE);
}
public function save() {
fileStream.close();
file.deleteFile();
load();
fileStream.writeUTFBytes(data.toXMLString());
fileStream.close();
}
Code:
// resolve the base drive for the xml file first into the _drive var
var _drives:Array = File.getRootDirectories();
var _drive:File = null;
for (var n = 0; n < _drives.length; n++) {
if (_drives[n].name == "C:") {
_drive = _drives[n];
break;
}
}
var xmle:XMLEditor = new XMLEditor(_drive);
var insertXML:XML = <item>
<id>1</id>
<name>Hello World!</name>
</item>
xmle.data.appendChild(insertXML);
xmle.save();
trace(xmle.data.item.(id=="1")[0].name); // Hello World!
/*
Untested from snippets of my current project
*/
__________________
![]() | Windows 7 Professional | Ubuntu 9.10 | San Diego A8N32-SLI Deluxe | AMD64 4000+ OC 2.9GHz | 3GB DDR 3200 | 512MB nVidia 7600 GT | 512MB nVidia 7800 GTX | 4 Monitors | | CS4 Actionscript 3.0 | Java | Javascript | C++ | C# | Visual Basic | ASP.net | HTML | XML | Perl | PHP | AJAX | MySQL | | Working on a project? I'm available for freelance. | Last edited by ImprisonedPride; 11-08-2009 at 02:30 AM. |
|
|
|
![]() |
|
||||||
| Thread Tools | Search this Thread |
| Display Modes | |
|
|