Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/09/2011, 13h09   #1
Invité de passage
 
Inscription : mai 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 21
Points : 4
Points : 4
Par défaut Lecture fichier XML

Bonjour,

J'ai un soucis avec la lecture d'un fichier xml. Pour commencer voila la structure :
Code :
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 :
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 ?
flipflip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 13h45   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 661
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 661
Points : 5 388
Points : 5 388
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
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 14h12   #3
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Ca ne serait pas plus simple d'utiliser SimpleXML ?
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/09/2011, 17h58   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
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).
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 12h51   #5
Invité de passage
 
Inscription : mai 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 21
Points : 4
Points : 4
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.
flipflip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 13h37   #6
Invité de passage
 
Inscription : mai 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 21
Points : 4
Points : 4
C'est un peu mieux avec SimpleXML mais je bloque toujours au même endroit. J'ai ce tableau :
Code :
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 :
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 :
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 :
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
flipflip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 13h42   #7
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 661
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 661
Points : 5 388
Points : 5 388
Sauf erreur de ma part, si tu veux plusieurs variables dans le même node il faut utiliser un tableau.
Code :
1
2
3
foreach ($slideshow as $iKey => $image) {
	$xml->image[$iKey] = $image;
}
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 15h35   #8
Invité de passage
 
Inscription : mai 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 21
Points : 4
Points : 4
$slideshow est bien un tableau
flipflip est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h47.


 
 
 
 
Partenaires

Hébergement Web