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

XML/XSL et SOAP Discussion :

SimpleXML avec XPATH pour une requete simple en apparence


Sujet :

XML/XSL et SOAP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Par défaut SimpleXML avec XPATH pour une requete simple en apparence
    Bonjour,

    Je rencontre actuellement un problème dans l'utilisation de SimpleXML associé à XPATH.

    En gros, voila mon problème.
    J'ai un fichier XML qui contenant ces 3 produits

    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
     
    <produit>
       <data>
          <nom>
             SALADE
          </nom>
       </data>
    </produit>
     
    <produit>
       <data>
          <nom>
                <text>
                   TOMATE
                </text>
          </nom>
       </data>
    </produit>
     
    <produit>
       <data>
          <nom>
             OIGNON
          </nom>
       </data>
    </produit>
    Le nom des produits se trouve à chaque fois dans "nom", SAUF dans UN cas ou il est dans "nom/text"

    (bien entendu, mon fichier xml est un peu plus complexe que cet exemple ^^)

    Ma question est la suivante : comment puis-je faire pour récupérer SALADE, TOMATE, OIGNON en une seule requete. Il faudrait pouvoir prendre ce qui se situe dans le "nom", SAUF SI il existe un enfant "text", à ce moment la il faudrait prendre la valeur de cet enfant.

    Merci d'avance pour votre aide ! (à noter qu'il faut que j'utilises SimpleXML)

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je suis une tanche en XSL, mais il me semble que c'est typiquement à ça que sert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //produit/data/nom/string()
    Ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //produit/data/nom/normalize-space()
    Si on veut se débarrasser du pretty-print.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Par défaut
    ok donc en utilisant SimpleXML ca donnerait quelque chose de ce style ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $file = simplexml_load_file(XML_URL)
     
    $file->produit->data->xpath('nom[string()]');
    Si c'est comme ca ca ne marche pas. en faisant un var_dump nom et son enfant

  4. #4
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Tu peux essayer quelle chose comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //produit/data/nom//text()

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Par défaut
    ca avance déjà un petit peu mais j'avais omis de vous dire quelque chose qui du coup me pose des problèmes avec cette solution

    "nom" possède 2 attributs, tandis que text n'en possède aucun. Du coup quand je veux afficher /nom/string() ca me renvoie un array

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Normalement string() ignore les attributs, donc ça n'a rien à voir.

    Et il est normal que /nom/string() renvoie un tableau, puisque tu sélectionnes tous les contenus de balise <nom>, et qu'il y a plus d'une balise <nom>.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Normalement string() ignore les attributs, donc ça n'a rien à voir.

    Et il est normal que /nom/string() renvoie un tableau, puisque tu sélectionnes tous les contenus de balise <nom>, et qu'il y a plus d'une balise <nom>.
    non car je fais un foreach donc je récupère les nom un par un

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je ne m'y connais pas beaucoup en PHP, mais logiquement une sélection XPath est souvent utilisée pour sélectionner plusieurs éléments, donc ça renvoie toujours un tableau, de zéro, un, ou plusieurs éléments. Logique.

    De plus, si tu ne veux pas partir de la racine mais de <data>, il faut sélectionner nom/string() et non pas /nom/string()
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Par défaut
    Bon aprés de multiples recherches, cela semble impossible directement via xpath avec simplexml. Il faudrait utiliser les feuilles xsl, mais comme je ne dois pas utiliser ces feuilles, et bien j'ai finalement opté pour un bon vieux test en php ! =D

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

Discussions similaires

  1. Problème avec checkbox pour une requete
    Par tyjez dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 22/09/2013, 20h20
  2. [XPATH] Résultat vide pour une requete xpath
    Par bitbis dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 20/06/2008, 14h41
  3. [MySQL] Cherche aide pour une requete avec jointure
    Par nasbe26 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 29/09/2007, 11h44
  4. Pb avec un edit pour une requete SQL
    Par TiEw34 dans le forum Bases de données
    Réponses: 3
    Dernier message: 31/05/2007, 00h18

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