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

Bibliothèques et frameworks PHP Discussion :

[XML] Recupérer valeur d'un noeud


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 19
    Points
    19
    Par défaut [XML] Recupérer valeur d'un noeud
    Bonjour,

    J'ai un léger souci avec XPath, j'ai besoin qu'il récupère des photos (nom de la photo) qu'il me le mettent dans une variables pour que j'utilise cette variable pour faire un déplacement de la photo d'un dossier vers un autre.

    Voici mon fichier xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Affaire_images>
    <image id="0">218190000002043T01.JPG</image>
    <image id="1">218190000002043T02.JPG</image>
    <image id="2">218190000002043T03.JPG</image>
    </Affaire_images>
    Voici mon code php :

    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
     
    $xml = simplexml_load_file("/home/monsite/www/dossier1/sous_dossier1/sous_sous_dossier1/monfichier.xml");
     
    foreach ($xml->Affaires as $ann)
    	{
    $pics = array();
     
    $xpath = new DOMXPath($xml);
    foreach ($xpath->query('//image[@id="$id"]') as $ann) {
    	$filename = $ann->nodeValue;
            if (file_exists('/home/monsite/www/dossier/sous_dossier/sous_sous_dossier/'.$filename)){
    	      $pics[] = '/images/dossier/'.$filename;
    	      echo '/images/dossier/'.$filename."\n";
    	      system("mv /home/monsite/www/dossier/sous_dossier1/sous_sous_dossier1/".$filename." /home/monsite/www/web/images/dossier/");
    	}
    }
    }
    Mais rien ne se passe. Pourriez-vous me dire et m'expliquer d'où vient le problème?

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je vois deux fois $ann là ou erreur s'est assurée...

    XPath modèle pour SimpleXml est différent de celui de DOMDocument et DOMXPath, en tout cas, pas la même chose.

    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
    $xml = simplexml_load_file("/home/monsite/www/dossier1/sous_dossier1/sous_sous_dossier1/monfichier.xml");
     
    //par exemple, il faut le définir
    $id=1;
     
    $pics = array();
     
    //attention la syntaxe pour effectuer l'interpolation
    foreach ($xml->xpath("//image[@id=$id]") as $ann) {
        $filename = $ann;    //ou $ann[0] est sufficient aussi
        if (file_exists('/home/monsite/www/dossier/sous_dossier/sous_sous_dossier/'.$filename)){
            $pics[] = '/images/dossier/'.$filename;
            echo '/images/dossier/'.$filename."\n";
            system("mv /home/monsite/www/dossier/sous_dossier1/sous_sous_dossier1/".$filename." /home/monsite/www/web/images/dossier/");
        }
    }
    Est-ce que ça fonctionne?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par tsuji Voir le message
    Je vois deux fois $ann là ou erreur s'est assurée...

    XPath modèle pour SimpleXml est différent de celui de DOMDocument et DOMXPath, en tout cas, pas la même chose.

    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
    $xml = simplexml_load_file("/home/monsite/www/dossier1/sous_dossier1/sous_sous_dossier1/monfichier.xml");
     
    //par exemple, il faut le définir
    $id=1;
     
    $pics = array();
     
    //attention la syntaxe pour effectuer l'interpolation
    foreach ($xml->xpath("//image[@id=$id]") as $ann) {
        $filename = $ann;    //ou $ann[0] est sufficient aussi
        if (file_exists('/home/monsite/www/dossier/sous_dossier/sous_sous_dossier/'.$filename)){
            $pics[] = '/images/dossier/'.$filename;
            echo '/images/dossier/'.$filename."\n";
            system("mv /home/monsite/www/dossier/sous_dossier1/sous_sous_dossier1/".$filename." /home/monsite/www/web/images/dossier/");
        }
    }
    Est-ce que ça fonctionne?

    Oui cela fonctionne mais j'ai un autre souci ^^', j'ai en faite besoin de récupéré une centaine d'images. Tout dans des balises former de ce style :

    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
    <Affaires>
    <Affaire>
    <Affaire_images>
    <image id="0">218190000002043T01.JPG</image>
    <image id="1">218190000002043T02.JPG</image>
    <image id="2">218190000002043T03.JPG</image>
    </Affaire_images>
    </Affaire>
    <Affaire>
    <Affaire_images>
    <image id="0">218190000001234T01.JPG</image>
    <image id="1">218190000001234T02.JPG</image>
    <image id="2">218190000001234T03.JPG</image>
    </Affaire_images>
    </Affaire>
    </Affaires>
    Le code que vous m'avez fourni ne récupère que dans le premier nœuds <Affaire>
    Alors que auparavant j'ai bien préciser de parcourir tout les nœuds.

    J'ai même réinitialiser en fin de boucle mais toujours le même problème sa ne parcours que le premier nœud.

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Ce n'est pas bien difficile de se convaincre qu'il parcours comme attendu: si vous ajoutez cette ligne après le loop, qu'est-ce que ça donne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo implode($pics,"\n");

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par tsuji Voir le message
    Ce n'est pas bien difficile de se convaincre qu'il parcours comme attendu: si vous ajoutez cette ligne après le loop, qu'est-ce que ça donne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo implode($pics,"\n");
    Sa me récupère bien toutes les photos, mais sa ne me lie pas aux affaires.

    Je veux que le groupe de photos de l'affaire sois liée à l'affaire. Pour l'instant sa me lie toutes les photos à la première affaire.

  6. #6
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    J'ai répondu la question que vous prétendez dire qu'il ne traverse pas tous les noeuds image spécifiés, c'est tout. Bien entendu $pics est un array qui collecte tous les donnée, pas ça?

    L'affaire? c'est quoi? vous voulez dire la ligne system() avec mv? Ce n'est pas la question.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par tsuji Voir le message
    J'ai répondu la question que vous prétendez dire qu'il ne traverse pas tous les noeuds image spécifiés, c'est tout. Bien entendu $pics est un array qui collecte tous les donnée, pas ça?

    L'affaire? c'est quoi? vous voulez dire la ligne system() avec mv? Ce n'est pas la question.
    Je me suis mal exprimé, j'ai mon fichier 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
    <Affaires>
    <Affaire>
    <Affaire_descrip>
    </Affaire_descrip>
    <Affaire_images>
    <image id="0">218190000002043T01.JPG</image>
    <image id="1">218190000002043T02.JPG</image>
    <image id="2">218190000002043T03.JPG</image>
    </Affaire_images>
    </Affaire>
    <Affaire>
    <Affaire_descrip>
    </Affaire_descrip>
    <Affaire_images>
    <image id="0">218190000001234T01.JPG</image>
    <image id="1">218190000001234T02.JPG</image>
    <image id="2">218190000001234T03.JPG</image>
    </Affaire_images>
    </Affaire>
    </Affaires>
    J'ai mon code php (j'ai mis le 3/4) :

    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
    protected function execute($arguments = array(), $options = array())
      {
    	$databaseManager = new sfDatabaseManager($this->configuration);
        $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     
     
    	if (file_exists('monsite/www/dossier1/sous_dossier1/sous_sous_dossier1/monfichier.xml')) {
    		$xml = simplexml_load_file("/home/monsite/www/dossier1/sous_dossier1/sous_sous_dossier1/monfichier.xml");
    foreach ($xml->Affaire as $ann)
    		{
    					$id=0;
     
    					$pics = array();
     
    					foreach ($xml->xpath("//image[@id=$id]") as $ann) {
    						$filename = $ann;    //ou $ann[0] est sufficient aussi
    						if (file_exists('/home/monsite/www/dossier/sous_dossier/sous_sous_dossier/'.$filename))
    						{
    							$pics[] = '/images/dossier/'.$filename;
    							echo '/images/dossier/'.$filename."\n";
            system("mv /home/monsite/www/dossier/sous_dossier1/sous_sous_dossier1/".$filename." /home/monsite/www/web/images/dossier/");
    						}
    					}
    					echo implode($pics,"\n");
    					$id=0;
    }

    De la j'ai besoin de faire en sorte que mes images correspondent aux <Affaire>, sachant que les <Affaire> peuvent contenir 1 à plusieurs photos et une description que je récupère parfaitement.

  8. #8
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Après je revisite le script, je vois mieux votre problème soulevé au deuxième étape. C'est ma faute. Cette ligne:
    foreach ($xml->xpath("//image[@id=$id]") as $ann) {
    doit s'écrire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($xml->xpath("//image[@id=".$id."]") as $ann) {
    Je suis désolé! Voulez-vous essayer de voir si ça va l'affaire?

  9. #9
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Mais encore je revien la ligne qui implémente l'idée d'interpolation que je suspecte provoker souci que vous soulevez dans les derniers messages:
    foreach ($xml->xpath("//image[@id=$id]") as $ann) {
    Je fais un petit test et ça marche très bien au fait. Du coup, je ne comprends plus votre souci dans les derniers messages.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    En faite si je regarde ma base, elle n'upload que les fichier T01.jpg à la fin

  11. #11
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Si je poste le script avec une seule foreach au lieu de deux dans ma première response pour la question et le script originaux, c'est bien avec une raison.

    Si vous insistez encore deux foreach, il faut tout de même pas faire appeler $ann deux fois la même, non? Ce n'est pas sympa pour PHP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $id=0;
    foreach ($xml->Affaire as $Attentionann) {
        $pics = array();
        //avec le context point (.) avant //image
        foreach ($Attentionann->xpath(".//image[@id=$id]") as $ann) {
            $filename = $ann;    //ou $ann[0] est sufficient aussi
            if (file_exists('/home/monsite/www/dossier/sous_dossier/sous_sous_dossier/'.$filename)) {
                $pics[] = '/images/dossier/'.$filename;
                echo '/images/dossier/'.$filename."\n";
                system("mv /home/monsite/www/dossier/sous_dossier1/sous_sous_dossier1/".$filename." /home/monsite/www/web/images/dossier/");
        }
        echo implode($pics,"\n");
    }

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par tsuji Voir le message
    Si je poste le script avec une seule foreach au lieu de deux dans ma première response pour la question et le script originaux, c'est bien avec une raison.

    Si vous insistez encore deux foreach, il faut tout de même pas faire appeler $ann deux fois la même, non? Ce n'est pas sympa pour PHP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $id=0;
    foreach ($xml->Affaire as $Attentionann) {
        $pics = array();
        //avec le context point (.) avant //image
        foreach ($Attentionann->xpath(".//image[@id=$id]") as $ann) {
            $filename = $ann;    //ou $ann[0] est sufficient aussi
            if (file_exists('/home/monsite/www/dossier/sous_dossier/sous_sous_dossier/'.$filename)) {
                $pics[] = '/images/dossier/'.$filename;
                echo '/images/dossier/'.$filename."\n";
                system("mv /home/monsite/www/dossier/sous_dossier1/sous_sous_dossier1/".$filename." /home/monsite/www/web/images/dossier/");
        }
        echo implode($pics,"\n");
    }
    En faite j'en fait 2 car la première doit récupérer les informations, il y a normalement plusieurs champs avant le champ image et la deuxième doit récupéré les images et sachant qu'il peut y avoir plusieurs image pour une informations, je dois faire la bouche pour les images dans la boucle pour les informations.

  13. #13
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Vous pouvez faire autant de foreach que vous voulez. Il faut les faire correctement, c'est tout. Aussi, il faut lire ce qu'on pose soigneusement et ne pas faire des diversions.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Je tiens déjà à vous remercier de toutes l'aide que vous m'avez fourni, elle m'a été d'une grande utilité.

    J'ai une dernière petite requête à vous faire.

    Voici le fichier XML exact:

    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
    32
    33
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Affaires>
    <Affaire id="0">
    <Affaire_titre>Titre Affaire</Affaire_titre>
    <Affaire_date>Date Affaire</Affaire_date>
    <Affaire_description>Affaire Description</Affaire_description> 
    <Affaire_images><image id="0">218190000002043T01.JPG</image><image id="1">218190000002043T02.JPG</image><image id="2">218190000002043T03.JPG</image></Affaire_images>
    </Affaire>
    <Affaire id="1">
    <Affaire_titre>Titre Affaire</Affaire_titre>
    <Affaire_date>Date Affaire</Affaire_date>
    <Affaire_description>Affaire Description</Affaire_description> 
    <Affaire_images><image id="0">218190000001234T01.JPG</image><image id="1">218190000001234T02.JPG</image><image id="2">218190000001234T03.JPG</image></Affaire_images>
    </Affaire>
    <Affaire id="2">
    <Affaire_titre>Titre Affaire</Affaire_titre>
    <Affaire_date>Date Affaire</Affaire_date>
    <Affaire_description>Affaire Description</Affaire_description> 
    <Affaire_images><image id="0">218190000005678T01.JPG</image><image id="1">218190000005678T02.JPG</image><image id="2">218190000005678T03.JPG</image><image id="3">218190000005678T03.JPG</image></Affaire_images>
    </Affaire>
    <Affaire id="...">
    <Affaire_titre>Titre Affaire</Affaire_titre>
    <Affaire_date>Date Affaire</Affaire_date>
    <Affaire_description>Affaire Description</Affaire_description> 
    <Affaire_images><image id="0">218190000006843T01.JPG</image></Affaire_images>
    </Affaire>
    <Affaire id="n"> <!-- n signifie qu'il peut il y en avoir une multitude non-connus préalablement. -->
    <Affaire_titre>Titre Affaire</Affaire_titre>
    <Affaire_date>Date Affaire</Affaire_date>
    <Affaire_description>Affaire Description</Affaire_description> 
    <Affaire_images><image id="0">218190000007934T01.JPG</image></Affaire_images> <!-- Les images peuvent avoir n'importe quelle non mais garde toujours le mème format -->
    </Affaire>
    </Affaires>
    Voici mon code php :

    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
    32
    33
    34
    35
    36
    protected function execute($arguments = array(), $options = array())
      {
    	$databaseManager = new sfDatabaseManager($this->configuration);
        $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     
     
    	if (file_exists('monsite/www/dossier1/sous_dossier1/sous_sous_dossier1/monfichier.xml')) 
    		{
    		$xml = simplexml_load_file("/home/monsite/www/dossier1/sous_dossier1/sous_sous_dossier1/monfichier.xml");
     
     
    		foreach ($xml->Affaire as $ann)
    				{
     
    					$titre = $ann->Affaire_titre;
    					$date = $ann->Affaire_date;
    					$description = $ann->Affaire_description;
     
    					$id_img=0;
     
    					$pics = array();
     
    					foreach ($ann->xpath(".//image[@id=".$id_img."]") as $ann_img) {
    						$filename = $ann_img;
    						if (file_exists('/home/monsite/www/dossier/sous_dossier/sous_sous_dossier/'.$filename))
    							{
    							$pics[] = '/images/dossier/'.$filename;
    							echo '/images/dossier/'.$filename."\n";
    							system("mv /home/monsite/www/dossier/sous_dossier1/sous_sous_dossier1/".$filename." /home/monsite/www/web/images/dossier/");
    							}
    							$id_img ++;
    						}
    					echo implode($pics,"\n");
    				}
    		}
    }
    Voici la raison pour laquelle je dois faire un double foreach .

    Il me lie enfin les images à leur affaire, mais que la première image. (Celle avec id = 0.

    J'ai tenté d'incrémenter la variable $id_img, mais je doute que dans un foreach sa passe.

  15. #15
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    un ou deux foreach, ce qui coute cher, le plus souvent... c'est le temps de développeur.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par gene69 Voir le message
    un ou deux foreach, ce qui coute cher, le plus souvent... c'est le temps de développeur.
    Je suis d'accord, et pour sa je lui remercie d'avoir pu m'offrir un peu de son temps.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Je replacer tout le contexte convenablement :
    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
    32
    33
    34
    <?php
    protected function execute($arguments = array(), $options = array())
      {
    	$databaseManager = new sfDatabaseManager($this->configuration);
        $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     
     
    	if (file_exists('monsite/www/dossier1/sous_dossier1/sous_sous_dossier1/monfichier.xml')) 
    		{
    		$xml = simplexml_load_file("/home/monsite/www/dossier1/sous_dossier1/sous_sous_dossier1/monfichier.xml");
     
    		$id_img=0;
    		foreach ($xml->Affaire as $ann)
    				{
     
    					$titre = $ann->Affaire_titre;
    					$date = $ann->Affaire_date;
    					$description = $ann->Affaire_description;
     
    					$pics = array();
     
    					foreach ($ann->xpath(".//image[@id=".$id_img."]") as $ann_img) {
    						$filename = $ann_img;
    						if (file_exists('/home/monsite/www/dossier/sous_dossier/sous_sous_dossier/'.$filename))
    							{
    							$pics[] = '/images/dossier/'.$filename;
    							echo '/images/dossier/'.$filename."\n";
    							system("mv /home/monsite/www/dossier/sous_dossier1/sous_sous_dossier1/".$filename." /home/monsite/www/web/images/dossier/");
    							}
    						}
    					echo implode($pics,"\n");
    				}
    		}
    }
    Mais sa ne me prend toujours que la première image.

  18. #18
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je n'ai pas encore lu votre message privé, mais votre avant dernier message est suffisamment clair que je vais répondre.

    C'est bien de l'avantage de faire une requête xpath avec un prédicat comme [@id=.$id_img]. Ca veut dire vous voulez choisir une balise qui a un attribut id de valeur bien déterminée. Sans cette préoccupation, vous ne le mettez pas tout court. Alors, vous manifestemment n'avez pas une valeur bien déterminée à choisir, donc, vous ne mettez pas de prédicat de ce genre.

    Vous profitez la utilité d'une requête xpath tout de même via .// qui s'appele une axis de xpath.

    Voici ce qu'il faut faire.
    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
    		//$id_img=0;
    		foreach ($xml->Affaire as $ann)
    				{
     
    					$titre = $ann->Affaire_titre;
    					$date = $ann->Affaire_date;
    					$description = $ann->Affaire_description;
     
    					$pics = array();
     
    					//foreach ($ann->xpath(".//image[@id=".$id_img."]") as $ann_img) {
    					foreach ($ann->xpath(".//image") as $ann_img) {
    						$filename = $ann_img;
    						if (file_exists('/home/monsite/www/dossier/sous_dossier/sous_sous_dossier/'.$filename))
    							{
    							$pics[] = '/images/dossier/'.$filename;
    							echo '/images/dossier/'.$filename."\n";
    							system("mv /home/monsite/www/dossier/sous_dossier1/sous_sous_dossier1/".$filename." /home/monsite/www/web/images/dossier/");
    							}
    						}
    					echo implode($pics,"\n");
    				}
    		}

  19. #19
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Je vous remercie!!! Vous m'avez été d'une très grande aide et je vous confirme que sa marche comme il le faut!!

    Je peux donc classer ce sujet comme résolu!! Encore merci!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] Modifier la valeur d'un noeud dans un fichier XML
    Par rob2-9 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 25/08/2008, 20h31
  2. Récupérer la valeur d'un noeud XML
    Par Tchupacabra dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/06/2008, 10h23
  3. incrémenter valeur d'un noeud xml avec javascript
    Par caweb dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/01/2008, 09h52
  4. Récupérer les valeurs d'un noeud dans un fichier XML
    Par yosthegost dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 17h38
  5. [DOM] JAVA & XML : valeur d'un noeud ELEMENT_NODE
    Par afadel dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 09/06/2005, 18h46

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