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:
To test: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(); }
This is just off the top of my head and a few pieces of code from my project. If it doesn't work it's probably me writing off the top of my head since it works for me just fine. Hopefully it points you in the right direction.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 */




Reply With Quote