Aide - Recherche - Membres - Calendrier
Version complète : XML et Flex
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
adakick
Bonjour je cherche a lire un fichier XML avec flex, je souhaite parcourir tous les éléments, voici la structure de mon XML :

CODE
<?xml version="1.0" encoding="UTF-8"?>
<list>
    <content>
        <thumbnail>lyoko.jpg</thumbnail>
        <preview>lyoko.flv</preview>
        <name>    CODE LYOKO</name>
        <desc>Infecté par un...</desc>
        <mediatype>video serial</mediatype>
        <duration>39.7</duration>
        <part>
            <thumbnail>lyoko1.jpg</thumbnail>
            <name>D'un cheveu</name>
            <desc>À la suite... </desc>
            <number>1</number>
        </part>
        <part>
            <thumbnail>lyoko2.jpg</thumbnail>
            <name>Créature de rêve</name>
            <desc>Nos héros...</desc>
            <number>2</number>
        </part>
    </content>
    <content>
        <thumbnail>lyoko.jpg</thumbnail>
        <preview>lyoko.flv</preview>
        <name>    CODE LYOKO</name>
        <desc>Infecté par un...</desc>
        <mediatype>video serial</mediatype>
        <duration>39.7</duration>
        <part>
            <thumbnail>lyoko1.jpg</thumbnail>
            <name>D'un cheveu</name>
            <desc>À la suite... </desc>
            <number>1</number>
        </part>
        <part>
            <thumbnail>lyoko2.jpg</thumbnail>
            <name>Créature de rêve</name>
            <desc>Nos héros...</desc>
            <number>2</number>
        </part>
    </content>
<list>


Mon fichier s'appel myXml.xml

J'ai fait ce code, pour deja recupere le name :

CODE
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
  
    <mx:XML id="directory" source="myXml.xml"></mx:XML>
    
    <mx:Tree dataProvider="{directory.list.content.name}" labelField="@label" showRoot="false"  width="200" height="200"/>
</mx:Application>


Mais cela me retoune le message d'erreur suivant :
CODE
Error: Problem parsing external XML: .../myXml.xml - (line 4) The entity name must immediately follow the '&' in the entity reference.


Si vous savez d' ou peur venir le problème et m'explique comment je pourrai parser correctement le fichier XML sa serait super.

Merci
Fusion
J'ai pas eu ton bug, mais pour que ça marche, je te conseille de finir ton XML par un </list> et non pas un <list>.

Sinon chez moi ça marche, mais rien n'est affiché... Je continue à tester...

Ah oui, j'ai une idée, si ça se trouve, tu demandes à créer l'arbre alors même que le Flex n'a pas fini de charger le XML. Attends l'événement onComplete avant de chercher à afficher l'arbre.
adakick
Ma fermeture de balise était bonne, je l'ai juste mal recopier. Merci en tout cas, je continue a regarder, si tu as trouver quelques chose tiens moi au courant.

Sinon le simple fait de mettre mon fichier sans la parcourir me renvoi la meme erreur...

Merci icon_biggrin.gif
Fusion
CODE
    <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:XML id="directory" source="myXml.xml" />
    <mx:Tree dataProvider="{directory}" labelField="@label" showRoot="true"  width="600" height="600"/>
</mx:Application>


Et dans ton XML remplace <list> par <list label="liste">.
Explication : dans labelField tu lui demandes de choisir un texte à afficher sur les noeuds de l'arbre, mais aucun neoud n'a d'attribut nommé "label"...


Ca marche mais pour une raison que j'ignore, l'affichage est "pollué", enfin tu verras vite de quoi je parle...
adakick
CITATION(Fusion @ Jul 4 2007, 12:49 PM) *
CODE
    <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:XML id="directory" source="myXml.xml" />
    <mx:Tree dataProvider="{directory}" labelField="@label" showRoot="true"  width="600" height="600"/>
</mx:Application>


Et dans ton XML remplace <list> par <list label="liste">.
Explication : dans labelField tu lui demandes de choisir un texte à afficher sur les noeuds de l'arbre, mais aucun neoud n'a d'attribut nommé "label"...
Ca marche mais pour une raison que j'ignore, l'affichage est "pollué", enfin tu verras vite de quoi je parle...


Ok sa fonctionne nikel ! Merci

Une derniere question, si je veut recupere ma valeure sous forme d'un Text... Comment faire ?
Par exemple je veut recupere le name[2].

Merci encore
Fusion
Remplace '@label' par 'name'.
Mais encore une fois l'affichage fait n'importe quoi icon_razz.gif
adakick
CITATION(Fusion @ Jul 4 2007, 02:07 PM) *
Remplace '@label' par 'name'.
Mais encore une fois l'affichage fait n'importe quoi icon_razz.gif

Non je voulais dire si je veut affecter une valeur récupéré par mon xml comment faire ?
Comment récupérer une valeur précise dans mon xml sans passer par le tree ?
Fusion
CITATION(adakick @ Jul 4 2007, 02:13 PM) *
Non je voulais dire si je veut affecter une valeur récupéré par mon xml comment faire ?
Comment récupérer une valeur précise dans mon xml sans passer par le tree ?



Exemple : directory..name[2] pour récupérer "Une créature de rêve".
Le .. indique que tu recherches dans tous les descendants (descendants), le . que tu cherches seulement parmi les enfants (children)
adakick
Ok merci beaucoup pour ton aide gourou.gif
adakick
CITATION(Fusion @ Jul 4 2007, 02:30 PM) *
Exemple : directory..name[2] pour récupérer "Une créature de rêve".
Le .. indique que tu recherches dans tous les descendants (descendants), le . que tu cherches seulement parmi les enfants (children)


Encore moi...
J'ai tester une navigation dans le xml ,mais cela ne fonctionne pas :

CODE
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
    <mx:Script>
        <![CDATA[
            private function onFindNode():void {
                var results:XMLList = new XMLList();
                var nodes:XMLList = directory..part.name;
                for each(var node:XML in nodes) {
                    var children:XMLList = node.children();
                    if(children.length() == 0){
                        results += node;
                   }
                }
                output.text = results.toXMLString();
            }
        ]]>
    </mx:Script>
    
    <mx:XML id="directory" source="myXml.xml"></mx:XML>
    
    <mx:Button label="Trouver" click="onFindNode()" />
    <mx:TextArea id="output" width="200" height="200" />
</mx:Application>


Ceci devrait me retourner 11 valeures, j'ai fait un test et je rentre bien 11 fois dans la boucle, mais je ne recupere rien...
Voici mon xml :

CODE
<?xml version="1.0" encoding="UTF-8"?>
<list>
    <content>
        <thumbnail>premierImage</thumbnail>
        <name>premierArtiste</name>
        <part>
            <name>premier</name>
        </part>
        <part>
            <name>second</name>
        </part>
        <part>
            <name>toisieme</name>
        </part>
        <part>
            <name>quatrimeme</name>
        </part>
        <part>
            <name>cinquieme</name>
        </part>
        <part>
            <name>Sixieme</name>
        </part>
    </content>    
    
    <content>
        <thumbnail>secondImage</thumbnail>
        <name>secondArtiste</name>
        <part>
            <name>septieme</name>
        </part>
        <part>
            <name>huitieme</name>
        </part>
        <part>
            <name>neuvieme</name>
        </part>
        <part>
                 <name>dixieme</name>
        </part>
        <part>
                 <name>onzieme</name>
        </part>
    </content>    
</list>
adakick
Ok j 'ai enlever
if(children.length() == 0){

}

Mais cela m 'affiche avec le format xml :

CODE
<name>1</name>
<name>2</name>
<name>3</name>
...

Comment enlever cela pourtant je fait un output.text = results.toXMLString();
Fusion
CODE
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
    <mx:Script>
        <![CDATA[
        
        import mx.controls.*;
            private function onFindNode():void {
                var results:XMLList = new XMLList();
                var nodes:XMLList = directory..part.name;
                for each(var node:XML in nodes) {
                    output.text += node+'\n';
                }
                

            }
        ]]>
    </mx:Script>
    
    <mx:XML id="directory" source="myXml.xml" />
    
    <mx:Button label="Trouver" click="onFindNode()" />
    <mx:TextArea id="output" width="200" height="200" />
</mx:Application>
adakick
ok merci encore
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.