Connexion XML - help me please !

Résolu
thePureXtc Messages postés 4 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 2 mai 2009 - 29 avril 2009 à 00:36
thePureXtc Messages postés 4 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 2 mai 2009 - 2 mai 2009 à 18:26
Bonjour à tous,D'habitude je crée moi-même le XML et m'y connecte donc sans trop de problèmes. Ici je dois collaborer avec une boîte qui ne n'arrive pas à enlever le titre du document qui me gêne quand je veux accéder aux donnée. Je n'arrive pas à passer par dessus cette foutue ligne..... C'est tout con, j'espère que quelqu'un pourra m'aider. Please.

Voici un extrait de mon XML :

<?xml version= "1.0" encoding="UTF-8"?>

<Data>

<row>

cover_flow_images/album1.gif

<NO-CLIENT>100004</NO-CLIENT>

<FONCTION>Infirmier CAM</FONCTION>

<ENTREE>de suite ou mars 2009</ENTREE>

Recherche 2 infirmiers;


<LIEUTRAVAIL>Lausanne</LIEUTRAVAIL>

CAM, Chirurgie ambulatoire

<SPRACHE-KUNDE>Français</SPRACHE-KUNDE>

<VAKANZART>Fixe</VAKANZART>

</row>

</Data>

Voici un extrait du XML qu'on me donne, voyez les lignes avant "<Data>" :

<?xml version ="1.0" encoding="UTF-8"?>

<CxtXMLEnvelope>

<Header>

<DocumentStandard>XML</DocumentStandard>

<DocumentType>VAKANZEN</DocumentType>

</Header>

<Data>

<row>

album1.gif

<NO-CLIENT>100004-6</NO-CLIENT>

<FONCTION>Infirmier CAM</FONCTION>

<ENTREE>de suite ou mars 2009</ENTREE>

Recherche 2 infirmiers .


<LIEUTRAVAIL>Lausanne</LIEUTRAVAIL>

CAM, Chirurgie ambulatoire ( env. 1 par mois)

<SPRACHE-KUNDE>Français</SPRACHE-KUNDE>

<VAKANZART>Fixe</VAKANZART>

</row>

<Data>

Jusqu'à présent je parcourais le XML de la sorte, comment modifier ces lignes ???

xmlData.onLoad = function(success:Boolean):Void {

if (success) {

for (var i:Number = -1; this.childNodes[0].childNodes[++i]; ) {

var cNode:XMLNode = this.childNodes[0].childNodes[i].childNodes;

var val2:String = cNode[1].childNodes[0].nodeValue ? unescape(cNode[1].childNodes[0].nodeValue) : update;

var val3:String = cNode[2].childNodes[0].nodeValue ? unescape(cNode[2].childNodes[0].nodeValue) : update;

var val4:String = cNode[3].childNodes[0].nodeValue ? unescape(cNode[3].childNodes[0].nodeValue) : update;

var val5:String = cNode[4].childNodes[0].nodeValue ? unescape(cNode[4].childNodes[0].nodeValue) : update;

var val6:String = cNode[5].childNodes[0].nodeValue ? unescape(cNode[5].childNodes[0].nodeValue) : update;

var val7:String = cNode[6].childNodes[0].nodeValue ? unescape(cNode[6].childNodes[0].nodeValue) : update;

var val8:String = cNode[7].childNodes[0].nodeValue ? unescape(cNode[7].childNodes[0].nodeValue) : update;

var val9:String = cNode[8].childNodes[0].nodeValue ? unescape(cNode[8].childNodes[0].nodeValue) : update;

infostruc.push({art:cNode[0].childNodes[0].nodeValue, info:val1, auth:val2, album:val3, album2:val4, album3:val5, album4:val6, album5:val7, album6:val8, album7:val8, album8:val9, loaded:false});

}

loadStat = "";

init();

} else {

loadStat = "Nous n'avons aucun poste vacant en ce moment";

}

};


Grégory, Suisse

9 réponses

Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
29 avril 2009 à 09:20
Hello,

Mmmhh je serai toi je passerai tout de suite sur ActionScript 3. La gestion du XML passe en type primitif et parcourir un XML devient un vrai jeu d'enfant !

Pour charger un XML en AS3, il faut utiliser la classe URLLoader.

Exemple (de tête) :

var myXML:XML;

var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, completeLoad);
xmlLoader.load(new URLRequest("monxml.xml"));

function completeLoad(evt:Event):void {
myXML = evt.target.data; //A vérifié la présence de l'attribut 'data' dans le dictionnaire ActionScript.
}

Ensuite pour parcourir un xml, rien de plus facile :

var num:String : myXML.row.element('NO-CLIENT');
//Ici on utilise la méthode element() du fait du caractère spécial employé dans le nom de l'enfant. Autrement il suffirait de faire myXML.row.noclient; D'où l'intérêt de ne pas utiliser de caractère spéciaux :)

Pour lire un attribut :
myXML.row.noeud.@monAttribut;

Mieux encore, pour récupérer un noeud particulier
myXML.row.noeud.(@monAttribut == 1).noclient;

Evidement dans la parenthèse on peut utiliser n'importe quelle condition.

Et tout cela, grâce à l'E4X !
Hop un petit lien : http://fr.wikipedia.org/wiki/E4X

Blacknight
www.osteres.com
3
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
29 avril 2009 à 09:22
Je peux également te renvoyer vers le cours de XML que j'ai donné il y a deux semaines et dont les documents sont présent sur mon blog :
http://www.osteres.com/blog/article/atelier-flash-5_144
3
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
29 avril 2009 à 09:24
Bonjour,

je suppose que le xml est cloturé par une balise  </CxtXMLEnvelope>
Si c'est le cas, alors ce qui t'intéresses ces le second noeud du XML (<HEADER></HEADER> représentant le premier)

je modifierais en conséquence ta fonction

xmlData.onLoad = function(success:Boolean):Void {
if (success) {

var baseNode:XMLNode=this.firstChild.childNode[1]
var totalNodes:Number=baseNode.childNodes.length

for (var i:Number = 0; i<totalNodes;i++ ) {
var cNode:XMLNode = baseNode.childNodes[i].childNodes;
var val2:String = cNode[1].childNodes[0].nodeValue ? unescape(cNode[1].childNodes[0].nodeValue) : update;
var val3:String = cNode[2].childNodes[0].nodeValue ? unescape(cNode[2].childNodes[0].nodeValue) : update;
var val4:String = cNode[3].childNodes[0].nodeValue ? unescape(cNode[3].childNodes[0].nodeValue) : update;
var val5:String = cNode[4].childNodes[0].nodeValue ? unescape(cNode[4].childNodes[0].nodeValue) : update;
var val6:String = cNode[5].childNodes[0].nodeValue ? unescape(cNode[5].childNodes[0].nodeValue) : update;
var val7:String = cNode[6].childNodes[0].nodeValue ? unescape(cNode[6].childNodes[0].nodeValue) : update;
var val8:String = cNode[7].childNodes[0].nodeValue ? unescape(cNode[7].childNodes[0].nodeValue) : update;
var val9:String = cNode[8].childNodes[0].nodeValue ? unescape(cNode[8].childNodes[0].nodeValue) : update;

infostruc.push({art:cNode[0].childNodes[0].nodeValue, info:val1,
auth:val2, album:val3, album2:val4, album3:val5, album4:val6,
album5:val7, album6:val8, album7:val8, album8:val9, loaded:false});
}
loadStat = "";
init();
} else {
loadStat = "Nous n'avons aucun poste vacant en ce moment";
}
};

@+
3
thePureXtc Messages postés 4 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 2 mai 2009
29 avril 2009 à 22:05
Wouah,


Merci beaucoup ! Non seulement j'ai eus une réponse direct de Girou mais blackNight m'à aussi aiguillé vers une meilleure architecture pour mes futur projets.

C'est clair, il faut que je me mette à l'AS3 et tu n'es pas le premier à me le dire.

Grâce à tes précieux conseils et à ton lien, je vais me mettre un coup de pied au derrière et m'y intéresser de plus près!


Je reviens vers vous vers la fin de semaine, on inaugure demain notre bureau ! Et il y a du boulot.... Et plus particulièrement vers toi Girou, si tu auras encore l'obligeance de m'accorder quelques lignes sur ce projet en AS2, j'ai rapidement essayé avec la modif conseillée mais ça ne passe toujours pas, je passe encore quelques heures dessus et reviens vers toi avec plus de précisions si tu es d'accord. Là je dois aider mes collègues à organiser les derniers détails.


Je ne pensais pas recevoir si rapidement de si riches réponses, merci à vous deux pour le temps consacré.


Bien à vous,

Grégory
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
30 avril 2009 à 09:21
Bonjour,

j'ai relevé une petie erreur dans mon adaptation de ton script

xmlData.onLoad = function(success:Boolean):Void {
if (success) {

var baseNode:XMLNode=this.firstChild.childNode s [1]
var totalNodes:Number =baseNode.childNodes.length

for (var i:Number = 0; i<totalNodes;i++ ) {
var cNode:XMLNode = baseNode.childNodes[i].childNodes;
var val2:String = cNode[1].childNodes[0].nodeValue ? unescape(cNode[1].childNodes[0].nodeValue) : update;
var val3:String = cNode[2].childNodes[0].nodeValue ? unescape(cNode[2].childNodes[0].nodeValue) : update;
var val4:String = cNode[3].childNodes[0].nodeValue ? unescape(cNode[3].childNodes[0].nodeValue) : update;
var val5:String = cNode[4].childNodes[0].nodeValue ? unescape(cNode[4].childNodes[0].nodeValue) : update;
var val6:String = cNode[5].childNodes[0].nodeValue ? unescape(cNode[5].childNodes[0].nodeValue) : update;
var val7:String = cNode[6].childNodes[0].nodeValue ? unescape(cNode[6].childNodes[0].nodeValue) : update;
var val8:String = cNode[7].childNodes[0].nodeValue ? unescape(cNode[7].childNodes[0].nodeValue) : update;
var val9:String = cNode[8].childNodes[0].nodeValue ? unescape(cNode[8].childNodes[0].nodeValue) : update;

infostruc.push({art:cNode[0].childNodes[0].nodeValue, info:val1,
auth:val2, album:val3, album2:val4, album3:val5, album4:val6,
album5:val7, album6:val8, album7:val8, album8:val9, loaded:false});
}
loadStat = "";
init();
} else {
loadStat = "Nous n'avons aucun poste vacant en ce moment";
}
};

La, ça devrait fonctionner (j'ai testé )

@+
3
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
30 avril 2009 à 09:29
Pas de soucis thePureXtc.

Je reste persuadé cependant qu'une section ActionScript 3 dans les catégories serait fort utile pour ceux souhaitant passer à AS3.

D'expérience personnel, depuis que je suis passé sur ActionScript 3, je travaille beaucoup plus efficacement et de façon plus structurer. Cela se répercute d'ailleurs également sur les autres langages sur lesquels je travaille ;)

Passer à ActionScript 3 est donc réellement une bonne chose.

Blacknight
www.osteres.com
3
thePureXtc Messages postés 4 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 2 mai 2009
2 mai 2009 à 13:46
Comment dire ? Mille mercis !


Ca marche du tonner ! Girou tu cartonnes !!!!

Je me remets gentillement de notre soirée d'inauguration de ce jeudi ! C'était une vraie réussite. Quelle surprise d'avoir mon code propre en ordre juste après !

D'ailleurs si vous passez à Lausanne un jour, venez me dire bonjour à 2, rue des Terreaux (au coeur de la ville) et je vous offre une bonne petite bière ! Avec plaisir !


D'ailleurs si vous avez besoin d'un conseil graphique ou d'une remarque constructive pour vos applications, n'hésitez pas (là je suis plus fort : http://gregory-aegerter.ch) !

J'aimerai vous rendre la pareil. Merci encore d'avoir pris le temps.


BlackNight, c'est promis : mon prochain travail de formation personnelle se portera sur mon passage de l'AS2 à l'AS3. J'ai gardé tout tes précieux liens.


Merci encore pour vos précieux conseils.

Très beau week-end à vous !


Grégory Aegerter,

Lausanne, Suisse
3
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
2 mai 2009 à 14:40
Et bien voila une personne dont on aura compris la satisfaction ! :)

Je te répondrai donc un simple : Derien
Nous sommes la pour ça ;)

Note : Penses à indiquer ton topic comme ayant trouvé une réponse à ta question (avec le bouton "réponse acceptée").
3
thePureXtc Messages postés 4 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 2 mai 2009
2 mai 2009 à 18:26
Voilà c'est fait ;)


A noté que sous OSX on ne lit que "réponse" sur le bouton, le reste est masqué !


A bientôt ;)
3
Rejoignez-nous