Aller au contenu


Modification de l'attribut d'un XML


  • Vous ne pouvez pas répondre à ce sujet
5 réponses à ce sujet

#1 multimania

    Ceinture Verte

  • Members
  • 64 messages

Posté 09 janvier 2012 - 03:04

Bonjour à tous


Je cherche en AS3 à modifier le contenu d'un XML

voici la structure de mon fichier XML une fois loader

<list nomdossier="mesfilms">
<Film NomChemin="C:\monfilm.flv" Titre="Mon film de test" />
<Film HauteurImage="1024" LargeurImage="768"/>
<Film Titre="Film Presentation Legrand"/>
</list>

Je cherche par le code à modifier la valeur de l'attribut "NomChemin" avec par exemple "C:\monautrefilm.flv"

de sorte à retrouver la structure d'xml suivante

<list nomdossier="mesfilms">
<Film NomChemin="C:\monautrefilm.flv" Titre="Mon film de test" />
<Film HauteurImage="1024" LargeurImage="768"/>
<Film Titre="Film Presentation Legrand"/>
</list>


function onCompleteChargement(event:Event) {
FilmXMLListe = new XML(DonneesFilm.data);
var CheminFilm:String = FilmXMLListe.Film.@NomChemin;
trace(CheminFilm);
FilmXMLListe.Film.@Nom = "monautrefilm.flv";

}

la ligne "FilmXMLListe.Film.@Nom = "monautrefilm.flv";" me génère une erreur et et n'affecte pas la valeur demandé
à la structure xml.

erreur => "TypeError: Error #1089: L'affectation à des listes composées de plus d'un élément n'est pas prise en charge."

Pourtant j'ai trouvé plusieurs tuto qui étaient tous dans ce sens mais je n'arrive pas a faire quoi que ce soit.

Si vous avez une piste pour m'aiguiller je suis preneur

Merci d'avance

Cordialement

#2 badwolf

    Ceinture Noire

  • Members
  • 351 messages
  • Logiciels utilisés:Flash, Flex

Posté 09 janvier 2012 - 03:08

FilmXMLListe.Film.@Nom = "monautrefilm.flv";

Hello,

je ne vois aucun attribut "Nom" dans ton XML

Valar morghulis

#3 multimania

    Ceinture Verte

  • Members
  • 64 messages

Posté 10 janvier 2012 - 06:33

Bonjour

Effectivement il faut lire "FilmXMLListe.Film.@NomChemin = "monautrefilm.flv", mais ce n'est pas ce qui génère l'erreur !

d'avance merci

#4 multimania

    Ceinture Verte

  • Members
  • 64 messages

Posté 13 janvier 2012 - 10:10

Bonjour

Je ne sais pas si je suis sur le bon forum !! car il n'y à pas de réponse ni de piste pour mon problème.....

Flash est-il en perte de vitesse chez les développeurs ????
ou a t-il un avenir sombre avec la venu du HTML5 ???



Dans tout les cas la persévérance et le meilleur des alliés, mais à quel prix........

Étant plutôt partageur je pense à ceux qui ont eu la même interrogation ou similaire.

Donc voici une partie de la réponse......
en fait il faut écrire :

FilmXMLListe.Film[0].@NomChemin= "monautrefilm.flv";

le[0] n'est autre que le numero de ligne de balise <Film

Exemple
-------------------------------------------------------------
<Film NomChemin="C:\monfilm.flv" Titre="Mon film de test" />
<Film HauteurImage="1024" LargeurImage="768"/>
<Film Titre="Film Presentation Legrand"/>
-------------------------------------------------------------

Pour modifier par exemple la "largeurImage" (2éme ligne balise Film) il faut faire

FilmXMLListe.Film[1].@LargeurImage= "500"; (L'incrément de ligne commence à Zéro)
etc .... etc ....

Si une autre Balise existe dans le même fichier XML il faut faire de même avec la nouvelle balise exemple :

FilmXMLListe.AutreBalise[0].@TOTO = "donne";



Par contre je n'ai pas trouvé pour récupérer le numéro de la ligne à partir de l'information "FilmXMLListe.Film.@NomChemin" par exemple .....

Si quelqu'un à une piste .... Sinon je ne manquerais pas de vous le faire savoir

Bon Flash à tous

#5 badwolf

    Ceinture Noire

  • Members
  • 351 messages
  • Logiciels utilisés:Flash, Flex

Posté 13 janvier 2012 - 12:54

FilmXMLListe.Film est de type XMLList donc une liste de noeud XML, en gros un tableau.

donc comme pour un tableau tu fais tab[0] etc...

donc il est normal de faire FilmXMLListe.Film[0].

si tu fais FilmXMLListe.Film.length() tu obtiens 3 :roll:

je vois pas l'intérêt de récupérer l'index mais tu peux utiliser ca:

var doc:XML = <list nomdossier="mesfilms">
<Film NomChemin="C:\monfilm.flv" Titre="Mon film de test" />
<Film HauteurImage="1024" LargeurImage="768"/>
<Film Titre="Film Presentation Legrand"/>
</list>;

trace(doc.Film.@NomChemin);
trace(hasAttribute('NomChemin', doc.Film));

function hasAttribute(name:String, xml:XMLList):Number{
        for(var i:uint = 0; i < xml.length(); i++){
                if ("@"+name in xml[i]){
                        return i;
                        break;
                }
        }
        return -1;
}

sinon pour tes autres remarques, les forums de ne se sont jamais aussi bien portés au dire des administrateurs.

peut être faut-il te remettre en question ?

ton premier message est un pâté illisible, ton code n'est même pas dans une "balise code", beaucoup de personnes penseront que tu ne fais pas d'effort et ne se donneront même pas la peine de te lire et donc de te répondre.

de plus, tout le monde ne connait pas tout sur cette technologie, ton XML est formé n'importe comment et n'est pas standard, ça va que Flash est souple de ce coté là , ce serait sur d'autres technologies, tu ne pourrais même pas le charger.

sinon je serais bien curieux de te voir parcourir du XML en HTML5 pur :mrgreen: , petit rappel, la norme e4X (de flash notamment...) est la norme la plus rapide pour parcourir du XML.

Modifié par Badwolf, 13 janvier 2012 - 12:55 .


Valar morghulis

#6 multimania

    Ceinture Verte

  • Members
  • 64 messages

Posté 14 janvier 2012 - 10:14

Bonjour

Merci de ta réponse "Badwolf", et pour la solution apportée.

Mon xml n'est peut-être pas "catholique" pourtant je me suis inspiré d'un code existant sur ce forum .

Quelle est donc la bonne syntaxe d'xml ???

Bien heureux que les forums flash et flash lui même ne soit pas en perte de vitesse, car pour moi c'est un outils formidable avec des ressources infinies. Pour ma part je l'utilise plus en tant qu'applicatif et il me convient parfaitement. Mon inquiétude était justement qu'il ne soit supplanté par autre chose.

Désolé si ma demande est mal formulé, mais je ne suis pas un pro des forums...


Cordialement





1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS - Tel. 0826 466 613 - Fax. 01 72 70 31 38

FFP