Lecture ecriture d'un fichier XML Air/As3
Dernière réponse : dans Programmation
Salut,
Je souhaite créer une classe qui me permette de lire un fichier xml et, si il s'avère vide, entrer une string par défaut.
J'ai le code suivant :
Mais le problème c'est que ça m'affiche rien ni dans le xml ni dans la sortie : /.
Une idée ?
Merci d'avance.
Je souhaite créer une classe qui me permette de lire un fichier xml et, si il s'avère vide, entrer une string par défaut.
J'ai le code suivant :
import flash.filesystem.*;
import flash.events.Event;
var file:File = File.documentsDirectory;
file = file.resolvePath("AS3/Air Test/test.xml");
var fileStream:FileStream = new FileStream();
fileStream.openAsync(file, FileMode.UPDATE);
var str:String;
str = fileStream.readUTFBytes(fileStream.bytesAvailable);
if(str == null)
{
var projectname = "projet1";
var projectnumber = 1;
fileStream.writeUTFBytes("<projet " + projectnumber + "name='" + projectname + "' author='default' size='0' date='01/01/10'>");
fileStream.addEventListener(Event.CLOSE, fileClosed);
fileStream.close();
function fileClosed(event:Event):void
{
trace("closed");
}
}
else
{
trace(str);
}
Mais le problème c'est que ça m'affiche rien ni dans le xml ni dans la sortie : /.
Une idée ?
Merci d'avance.
Autres pages sur : lecture ecriture fichier xml air as3
Lassé par la pub ? Créez un compte
Si tu clic sur les chiffres à gauche des lignes, t'as pas un rond qui s'affiche ? Ou une couleur qui viens sur la ligne ?
Si oui, c'est le point d'arrêt, tu le balance sur la ligne juste avant la réception de ton string.
Ensuite tu fais ton "ctrl shift entrée", et tu fais un clic droit sur le string, tu pourras surement ajouter un espion.
(alt + F5 pour exécuter le pas à pas)
Si oui, c'est le point d'arrêt, tu le balance sur la ligne juste avant la réception de ton string.
Ensuite tu fais ton "ctrl shift entrée", et tu fais un clic droit sur le string, tu pourras surement ajouter un espion.
(alt + F5 pour exécuter le pas à pas)
Bah en fait ce code s'inscrit dans une application dans laquelle j'ai besoin de faire une liste de projets qui serait stocké sous forme d'un xml. Et là je veux faire une fonction d'initialisation de mon xml. Normalement il ne doit pas ne rien avoir dans le fichier c'est pour ça que si y'a rien je met un project defaut mais si y'a quelque chose je passe à l'étape d'après : affichage de la liste de projets.
Bon alors j'en ai discuté avec mon prof qui m'a dit que mon système c'était de la merde et qu'il fallait que je charge le XML dans des tableaux. Il m'a donc filé ce code :
Ça marche pas trop mal, sauf la fonction save() à laquelle je pige pas grand chose ainsi que ce que j'ai mis en rouge.
Donc si vous avez encore une idée
//charge le fichier voulu
var c:URLLoader = new URLLoader(new URLRequest("Projets.xml"));
c.addEventListener(Event.COMPLETE, comp);
//créer le tableau
var tab:Array = [];
//fonction qui met le contenu du xml dans le tableau
function comp(e){
//affiche le contenu du fichier
trace(e.target.data);
var xmlTmp:XMLList = new XML(e.target.data).*;
//xmlTmp contient le contenu du fichier XML
var nb:int = xmlTmp.length();
//affiche la longueur du fichier (nombre de projets)
trace(nb);
//on crée un tableau d'objets
var o:Object = {};
for(var i:int = 0 ; i < nb ; i++){
o = {};
[color=#ff0000]for each (var n:XML in xmlTmp[i].@*)[/color]{
trace(n.name(), n);
o[n.name().toString()] = n;
}
tab.push(o);
}
trace(tab[0].dmodif);
save();
}
function save(){
tab[1].projet = "projet1";
var str:String = "<?xml version='1.0' encoding='ISO-8859-1'?><base>";
for(var i:int = 0 ; i < tab.length ; i++){
if(i == 1){
str += "\n<elt ";
for(var m:* in tab[i]){
if(m == "projet") str += m+"=\""+tab[i][m]+"\" ";
}
str += " />";
}
}
str += "</base>";
trace(str);
}
Ça marche pas trop mal, sauf la fonction save() à laquelle je pige pas grand chose ainsi que ce que j'ai mis en rouge.
Donc si vous avez encore une idée
Salut,
Je fais pas d'AS, mais ça devrait être ça :
Vu que c'est du XML, ça fait une boucle sur tous les éléments du tableau. Le @ précise que l'on spécifie des attributs, et le * précise que l'on veut tous les éléments.
xmlTmp.@* veut dire que l'on récupère tous les attributs de cet élément.
Et pour le save (voir commentaires en vert):
Ca va te donner un fichier XML du type:
Je fais pas d'AS, mais ça devrait être ça :
for each (var n:XML in xmlTmp[i].@*)
Vu que c'est du XML, ça fait une boucle sur tous les éléments du tableau. Le @ précise que l'on spécifie des attributs, et le * précise que l'on veut tous les éléments.
xmlTmp.@* veut dire que l'on récupère tous les attributs de cet élément.
Et pour le save (voir commentaires en vert):
function save(){ tab[1].projet = "projet1"; // Initialise une chaine qui va contenir du XML. (c'est le header du XML avec un élément root nommé base) var str:String = "<?xml version='1.0' encoding='ISO-8859-1'?><base>"; for(var i:int = 0 ; i < tab.length ; i++){ if(i == 1){ // Ajoute un nouveau noeud XML auquel il va ajouter des attributs, donc il l'ouvre juste. str += "\n<elt "; // Pour tous les éléments du tableau for(var m:* in tab[i]){ // Si le nom de l'élément est "projet", il ajoute un attribut à notre noeud XML nommé "project" (m) avec comme valeur tab[i][m] if(m == "projet" ) str += m+"=\""+tab[i][m]+"\" "; } // ferme le noeud XML str += " />"; } } // ferme la racine XML str += "</base>"; trace(str); }
Ca va te donner un fichier XML du type:
<?xml version='1.0' encoding='ISO-8859-1'?> <base> <elt project="valeur" /> </base>
Nan en fait le code marchait bien smoi qui faisait de la daube. Et merci pour les explications !
Bon maintenant en fait je voudrais une fonction qui puisse ajouter un projet par exemple à la fin du XML (avant la balise de fin évidemment).
Si j'utilise un
var x:XML = new XML("<a>test</a>");
ça me réécrit tout, y'a pas moyen de chatouiller qu'un seul champ à la fois ?
Bon maintenant en fait je voudrais une fonction qui puisse ajouter un projet par exemple à la fin du XML (avant la balise de fin évidemment).
Si j'utilise un
var x:XML = new XML("<a>test</a>");
ça me réécrit tout, y'a pas moyen de chatouiller qu'un seul champ à la fois ?
Merci encore =)
Bon alors du coup maintenant j'ai besoin d'un diffuseur d'évènement.
J'ai une classe qui charge mon XML dans un tableau. Et je voudrais que quand ça c'est fait, (le tableau est plein), ça m'envoie un event.
J'ai farfouillé sur google et je suis tombé sur ....
Je copie colle dans flahs et pas moyen de le tester ça me met :
1037: Packages cannot be nested.
En gros mon package peut pas être encapsulé .... mais je pige pas pkoi ?
Des idées ?
Bon alors du coup maintenant j'ai besoin d'un diffuseur d'évènement.
J'ai une classe qui charge mon XML dans un tableau. Et je voudrais que quand ça c'est fait, (le tableau est plein), ça m'envoie un event.
J'ai farfouillé sur google et je suis tombé sur ....
package { import flash.display.Sprite; import flash.events.Event; public class monDispatcher extends Sprite { public function MyDispatcher() { this.addEventListener("evenementPersonnalise", handler); this.dispatchEvent(new Event("evenementPersonnalise")); } private function handler(event:Event):void { trace(event.type); } } }
Je copie colle dans flahs et pas moyen de le tester ça me met :
1037: Packages cannot be nested.
En gros mon package peut pas être encapsulé .... mais je pige pas pkoi ?
Des idées ?
C'est que tu mets ce code à l'intérieur d'une autre classe. J'imagine que tu ne dois pas avoir que ça comme code dans le fichier.
Essaie de mettre cette déclaration, soit dans un autre fichier, soit après avoir fermé la déclaration d'une classe (je crois pas qu'il y ait trop de notions de "fichiers" en AS)
Essaie de mettre cette déclaration, soit dans un autre fichier, soit après avoir fermé la déclaration d'une classe (je crois pas qu'il y ait trop de notions de "fichiers" en AS)
Dsl du double post, mais je cherche maintenant à supprimer des champs de mon XML.
mon XML ressemble à ça :
et ce que je veux c'est supprimer tous mes projets et donc tous les champs <projet ....../>
si vous avez une idée =)
(toujours en AS3 / Air bien sur)
merci
mon XML ressemble à ça :
<?xml version="1.0" encoding="utf-8" ?>
<data titre="Projets">
<projet num="01" nom="A SUPPRIMER" dateCrea="10/05/10" dateMAJ="10/05/10" srcimg="img/bg.jpg" xml="projets/projet1.xml"/>
<projet num="02" nom="A SUPPRIMERaussi" dateCrea="10/05/10" dateMAJ="10/05/10" srcimg="img/bg.jpg" xml="projets/projet2.xml"/>
</data>
et ce que je veux c'est supprimer tous mes projets et donc tous les champs <projet ....../>
si vous avez une idée =)
(toujours en AS3 / Air bien sur)
merci
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- solutionsLecture fichier xml
- ForumJava ecriture fichier xml
- ForumAfficher fichier xml avec php
- ForumOuvrir un fichier xml avec word
- ForumFichier xml
- ForumC parcourir fichier xml
- ForumModifier un fichier xml en java
- ForumXml caractere dans fichier xml
- ForumParser lire un fichier xml
- ForumTransformerfactory xml modification du fichier xml
- Voir plus
