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 :

Récupérer valeur d'un noeud xml vers du php


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 62
    Par défaut Récupérer valeur d'un noeud xml vers du php
    Bonsoir à tous,

    Je viens vers vous car je n'arrive pas à récupérer des valeurs de plusieurs nœuds.

    Je vous explique le projet

    A partir d'un lecteur carte vitale je dois récupérer les valeurs Nom,Prénom,Date de naissance et numéro de sécurité sociale pour qu'il soit inscrit automatiquement sur un formulaire ( Je pense utilisé les fonctions $post)

    Voici un bout du fichier xml que cardpeek me fournit

    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
                <node>
                  <attr name="classname">item</attr>
                  <attr name="label">Nom</attr>
                  <attr name="id">80</attr>
                  <attr name="size">63</attr>
                  <attr name="val" encoding="bytes">8:4C555A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020</attr>
                  <attr name="alt">NOM DU CLIENT                                                            </attr>
                </node>
                <node>
                  <attr name="classname">item</attr>
                  <attr name="label">Prénom</attr>
                  <attr name="id">81</attr>
                  <attr name="size">45</attr>
                  <attr name="val" encoding="bytes">8:42454E4A414D494E2020220202020202020202020202020202020202020202020202020202020202020</attr>
                  <attr name="alt">PRENOM DU CLIENT                                     </attr>
                </node>
                <node>
                  <attr name="classname">item</attr>
                  <attr name="label">Date de naissance</attr>
                  <attr name="id">82</attr>
                  <attr name="size">8</attr>
                  <attr name="val" encoding="bytes">8:3139383353232</attr>
                  <attr name="alt">XX/XX/XXXX</attr>
                </node>
    J'ai lus énormément de tutoriel pour utiliser DOM ou SimpleXML mais cela ne fonctionne pas car ou je coince c'est pour prendre les valeurs en vert

    J'ai essayé de récupérer mes valeurs à partir de ce code mais celui ne m'affiche rien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
      $dom = new DomDocument;
      $dom->load("test.xml");
      $nom = $dom->getElementsByTagName('attr');
      foreach($valeur_nom as $nom)
        echo $nom->firstChild->nodeValue . "<br />";
    ?>
    En espérant avoir une aide,

    En vous remerciant par avance,

    Funky

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    En parcourant la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $nodes = $dom->getElementsByTagName('nodes');
    foreach ($nodes as $nodes) {
    	foreach ($nodes->getElementsByTagName('attr') as $node_attr) {
    		$attr = $node_attr->getAttribute('name');
    		if ($attr == "alt") {
    			echo $node_attr->nodeValue;
    		}
    	}
    }
    ou en utilisant un xpath :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $xpath = new DOMXpath($dom);
    $elements = $xpath->query("/nodes/node/attr[@name='alt']");
    foreach ($elements as $value) {
    	echo $value->nodeValue;
    }
    dans les 2 cas j'ai supposé que tu as avais un niveau "nodes" au dessus de "node".
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 62
    Par défaut
    Merci Sabotage de ta réponse.

    En essayant ton code j'ai eu des erreurs lors de visualisation avec mon fichier php

    Ici je remet la structure réduit de mon .xml ( Ce que me donne cardpeek avec toutes les informations comporte 3170 lignes )

    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
    <?xml version="1.0" type="UTF-8"?>
    <cardpeek>
      <version>0.8.4-win32</version>
      <node>
        <attr name="classname">card</attr>
        <attr name="alt">VITALE 2</attr>
        <node>
          <attr name="classname">atr</attr>
          <attr name="label">cold ATR</attr>
          <attr name="size">10</attr>
          <attr name="val" encoding="bytes">8:3B751300004309EA9000</attr>
          <node>
            <attr name="classname">item</attr>
            <attr name="label">Possibly identified card</attr>
            <attr name="val">Vitale 2 (french health card)</attr>
          </node>
        </node>
     </node>
    <cardpeek>
    Comme tu l'avais signalé il y a bien un node au dessus

    J'ai inséré le code que tu m'a transmis comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $dom = new DomDocument;
    $dom->load("xml.xml");
    $nodes = $dom->getElementsByTagName('node');
    foreach ($nodes as $node) {
    	foreach ($nodes->getElementsByTagName('attr') as $node_attr) {
    		$attr = $node_attr->getAttribute('name');
    		if ($attr == "alt") {
    			echo $node_attr->nodeValue;
    		}
    	}
    }
    ?>
    J'ai également supprimés les "s" de node car dans le fichier .xml ils n'en disposent pas

    Mais aucune valeurs ne ressort...

    J'avais également vu xpath

    J'ai aussi essayé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     <?php
    $xml=simplexml_load_file("xml.xml") or die("Error: Cannot create object");
    echo $xml->node[0]->attr . "<br>";
    ?>
    Mais de même pas de valeurs..

    Depuis hier j'ai la tête dans le guidon et je pense que je vois pas mes erreurs..

    Merci d'avance pour les réponses

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    ton premier niveau c'est "cardpeek" pas "node"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $elements = $xpath->query("/cardpeek/node/attr[@name='alt']");
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $nodes = $dom->getElementsByTagName('cardpeek');
    foreach ($nodes as $nodes) {
    	foreach ($nodes->getElementsByTagName('attr') as $node_attr) {
    		$attr = $node_attr->getAttribute('name');
    		if ($attr == "alt") {
    			echo $node_attr->nodeValue;
    		}
    	}
    }
    Mais est-ce que c'est vraiment la bonne structure que tu nous as montré là ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 62
    Par défaut
    Voici mon fichier .xml au complet
    card2.xml

    Avec ton code je retourne une erreur

    Warning: DOMDocument::load(): parsing XML declaration: '?&gt;' expected in file:/C:/wamp64/www/card.xml, line: 1 in C:\wamp64\www\test.php on line 3
    Mon code avec le tiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $dom = new DomDocument;
    $dom->load("card2.xml");
    $nodes = $dom->getElementsByTagName('cardpeek');
    foreach ($nodes as $nodes) {
    	foreach ($nodes->getElementsByTagName('attr') as $node_attr) {
    		$attr = $node_attr->getAttribute('name');
    		if ($attr == "alt") {
    			echo $node_attr->nodeValue;
    		}
    	}
    }
    ?>

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Chez moi, ça fonctionne à la seule restriction que ce type="UTF-8"n'est pas correct.
    Ca devrait être encoding="UTF-8"
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. [Débutant] récupérer valeur d'un noeud d'un fichier XML
    Par waspy59 dans le forum C#
    Réponses: 10
    Dernier message: 02/12/2016, 17h36
  2. [DOM] Récupérer la valeur d'un noeud XML
    Par sheira dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 16/11/2010, 10h45
  3. Réponses: 2
    Dernier message: 22/12/2008, 18h29
  4. 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
  5. 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

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