IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Lecture fichier XML


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Points : 82
    Points
    82
    Par défaut Lecture fichier XML
    Bonjour,

    J'ai un soucis avec la lecture d'un fichier xml. Pour commencer voila la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?xml version="1.0" encoding="UTF-8"?>
    <document>
        <id>0001</id>
        <name>tes</name>
        <width>900</width>
        <height></height>
        <spw></spw>
        <sph></sph>
        <delay></delay>
        <sdelay></sdelay>
        <opacity></opacity>
        <titleSpeed></titleSpeed>
        <effet>random</effet>
        <navigation>true</navigation>
        <links>true</links>
        <hoverPause>true</hoverPause>
        <image>
            <number>0001</number>
            <imagename>logfin+ombre.jpg</imagename>
            <description>des</description>
            <link>lin</link>
        </image>
        <image>
            <number>0002</number>
            <imagename>image.jpg</imagename>
            <description>des</description>
            <link>lin</link>
        </image>
    </document>
    J'ai une petite fonction qui est chargé de lire le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
        public function getSlideshow($content) {
            $filename = PLX_PLUGINS.'plxcoinslider/slideshow/'.$_SESSION['user'].'.'.$content.'.xml';
            # Mise en place du parseur XML
            $data = implode('',file($filename));
            $parser = xml_parser_create(PLX_CHARSET);
            xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
            xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0);
            xml_parse_into_struct($parser,$data,$values,$iTags);
            xml_parser_free($parser);
            $nb = sizeof($iTags['name']);
            # Recuperation des valeurs de nos champs XML
            for($i=0; $i < $nb; $i++) {
                $slideshow['id'] = isset($iTags['id'][$i])?$values[ $iTags['id'][$i] ]['value']:'';
                $slideshow['name'] = isset($iTags['name'][$i])?$values[ $iTags['name'][$i] ]['value']:'';
                $slideshow['width'] = isset($iTags['width'][$i])?$values[ $iTags['width'][$i] ]['value']:'';
                $slideshow['height'] = isset($iTags['height'][$i])?$values[ $iTags['height'][$i] ]['value']:'';
                $slideshow['spw'] = isset($iTags['spw'][$i])?$values[ $iTags['spw'][$i] ]['value']:'';
                $slideshow['sph'] = isset($iTags['sph'][$i])?$values[ $iTags['sph'][$i] ]['value']:'';
                $slideshow['delay'] = isset($iTags['delay'][$i])?$values[ $iTags['delay'][$i] ]['value']:'';
                $slideshow['sdelay'] = isset($iTags['sdelay'][$i])?$values[ $iTags['sdelay'][$i] ]['value']:'';
                $slideshow['opacity'] = isset($iTags['opacity'][$i])?$values[ $iTags['opacity'][$i] ]['value']:'';
                $slideshow['titleSpeed'] = isset($iTags['titleSpeed'][$i])?$values[ $iTags['titleSpeed'][$i] ]['value']:'';
                $slideshow['effet'] = isset($iTags['effet'][$i])?$values[ $iTags['effet'][$i] ]['value']:'';
                $slideshow['navigation'] = isset($iTags['navigation'][$i])?$values[ $iTags['navigation'][$i] ]['value']:'';
                $slideshow['links'] = isset($iTags['links'][$i])?$values[ $iTags['links'][$i] ]['value']:'';
                $slideshow['hoverPause'] = isset($iTags['hoverPause'][$i])?$values[ $iTags['hoverPause'][$i] ]['value']:'';
     
            # On retourne le tableau
            return $slideshow;
        }
    Tout marche correctement sauf pour la partie < image>...</ image>, je ne sais pas trop comment tourner le truc pour lire cette partie du fichier.

    Est-ce que vous avez une idée ?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Jette un oeil sur l'exemple #2 de la doc, ça a l'air d'être le même genre de structure http://fr.php.net/manual/fr/function...p#example-4790
    après, ça dépend de ce que tu souhaites faire de tes balises images

  3. #3
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 893
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 893
    Points : 16 346
    Points
    16 346
    Par défaut
    Ca ne serait pas plus simple d'utiliser SimpleXML ?

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 250
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 250
    Points : 8 530
    Points
    8 530
    Billets dans le blog
    17
    Par défaut
    Je plussoie pour SimpleXML, d'autant plus que tes fichiers XML n'ont pas l'air très volumineux (c'est peu de le dire).

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Points : 82
    Points
    82
    Par défaut
    Merci pour vos propositions. Je test avec SimpleXML qui est effectivement bien plus simple à utiliser.

    J'ai encore un petit soucis mais pour le moment j'ai pas tout re-écris donc je mets pas le post en résolu.

  6. #6
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Points : 82
    Points
    82
    Par défaut
    C'est un peu mieux avec SimpleXML mais je bloque toujours au même endroit. J'ai ce tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Array
    (
        [id] => 0001
        [name] => test
        [width] => 
        [height] => 
        [spw] => 
        [sph] => 
        [delay] => 
        [sdelay] => 
        [opacity] => 
        [titleSpeed] => 
        [effet] => 
        [navigation] => 
        [links] => 
        [hoverPause] => 
        [0] => Array
            (
                [number] => 0001
                [imagename] => piscine.jpg
                [description] => des
                [link] => lin
            )
        [1] => Array
            (
                [number] => 0002
                [imagename] => image2.jpg
                [description] => des
                [link] => lin
            )
    )
    Et j'utilise ce code pour l'écrire en xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    		$xml = simplexml_load_file($filename);
     
    		$xml->id = $content['id'];
    		$xml->name = $content['name'];
    		$xml->width = $content['width'];
    		$xml->height = $content['height'];
    		$xml->spw = $content['spw'];
    		$xml->sph = $content['sph'];
    		$xml->delay = $content['delay'];
    		$xml->sdelay = $content['sdelay'];
    		$xml->opacity = $content['opacity'];
    		$xml->titleSpeed = $content['titleSpeed'];
    		$xml->effet = $content['effet'];
    		$xml->navigation = $content['navigation'];
    		$xml->hoverPause = $content['hoverPause'];
     
    		foreach ($content as $key => $slideshow) {
    			if(is_array($content[ $key ])) {
    				foreach ($slideshow as $iKey => $image) {
    					$xml->image->$iKey = $image;
    				}
    			} 
    		}
     
    		$write = $xml->asXML();
    Le hic est que dans le foreach il écris uniquement le dernier élément de image. Voila le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <document>
    	<id>0001</id>
    	<name>test</name>
    	<width></width>
    	<height></height>
    	<spw></spw>
    	<sph></sph>
    	<delay></delay>
    	<sdelay></sdelay>
    	<opacity></opacity>
    	<titleSpeed></titleSpeed>
    	<effet></effet>
    	<navigation></navigation>
    	<hoverPause></hoverPause>
    	<image>
    		<number>0002</number>
    		<imagename>piscine.jpg</imagename>
    		<description>des2</description>
    		<link>lin2</link>
    	</image>
    </document>
    Alors que ça devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <document>
    	<id>0001</id>
    	<name>test</name>
    	<width></width>
    	<height></height>
    	<spw></spw>
    	<sph></sph>
    	<delay></delay>
    	<sdelay></sdelay>
    	<opacity></opacity>
    	<titleSpeed></titleSpeed>
    	<effet></effet>
    	<navigation></navigation>
    	<hoverPause></hoverPause>
    	<image>
    		<number>0001</number>
    		<imagename>piscine.jpg</imagename>
    		<description>des</description>
    		<link>lin</link>
    	</image>
    	<image>
    		<number>0002</number>
    		<imagename>image2.jpg</imagename>
    		<description>des</description>
    		<link>lin</link>
    	</image>
    </document>
    J'avoue être bien coincé. Ca fait un moment que je cherche la solution

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Sauf erreur de ma part, si tu veux plusieurs variables dans le même node il faut utiliser un tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($slideshow as $iKey => $image) {
    	$xml->image[$iKey] = $image;
    }

  8. #8
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Points : 82
    Points
    82
    Par défaut
    $slideshow est bien un tableau

Discussions similaires

  1. lecture fichier XML
    Par bhahmed dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/09/2006, 08h40
  2. [C#-XML] - Problème de lecture fichier XML
    Par Gloups dans le forum Windows Forms
    Réponses: 9
    Dernier message: 08/08/2006, 00h40
  3. Lecture fichier xml aux caracteres accentués
    Par LFC dans le forum Modules
    Réponses: 2
    Dernier message: 13/02/2006, 19h45
  4. Réponses: 3
    Dernier message: 09/12/2005, 17h42
  5. [SAX] Problème lecture fichier xml
    Par BernardT dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/07/2005, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo