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 :

Parser flux XML avec balise contenant ":" génère une erreur


Sujet :

XML/XSL et SOAP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Points : 53
    Points
    53
    Par défaut Parser flux XML avec balise contenant ":" génère une erreur
    Bonjour à tous,

    J'ai vu un message récent, mais qui n'a pas eu de réponses, et j'ai le même problème.
    Je me permets de reposter un nouveau message, car le titre du précédent ne me parait pas explicite.

    Donc voilà le problème, j'ai un fichier XML qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <channel><item>
      <data:price data:currency="EUR">4500</data:price>
      <data:regularPrice data:currency="EUR">6900</data:regularPrice>
    </item></channel>
    Je récupère mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $catalogue = simplexml_load_file(FLUX XML);
    puis je parse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($catalogue->item as $product) // Je parse le flux.
    {
    $prix=$product->{'data:price'};
    $ancien_prix=$product->{'data:regularPrice'};
    }
    Mais cela ne fonctionne pas.
    Le problème des ":" dans la balise génère une erreur.

    Merci d'avance pour vos conseils.

    P.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    J'ai vu le message précédent, j'ai parfaitement compris le problème et je vois bien que c'est le même.
    Mais moi, PHP je connais pas. Puisque le message précédent n'a pas eu de réponse, je suggère d'aller essayer de motiver un peu le forum PHP.

    Note : je signale quand même que ces data: en début de balise, ça s'appelle des préfixes. Les préfixes servent à placer les éléments dans un namespace auxquels ils ont été associés.
    Donc en gros, le principe devrait être non pas de demander l'élément <data:price>. Le principe devrait être de demander l'élément <price> de namespace "namespace dont le préfixe déclaré est data."
    Comment ? J'en sais rien, PHP connais pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Pierrick81 Voir le message
    Bonjour à tous,

    ...

    Donc voilà le problème, j'ai un fichier XML qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <channel><item>
      <data:price data:currency="EUR">4500</data:price>
      <data:regularPrice data:currency="EUR">6900</data:regularPrice>
    </item></channel>
    Je récupère mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $catalogue = simplexml_load_file(FLUX XML);
    puis je parse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($catalogue->item as $product) // Je parse le flux.
    {
    $prix=$product->{'data:price'};
    $ancien_prix=$product->{'data:regularPrice'};
    }
    Mais cela ne fonctionne pas.
    Le problème des ":" dans la balise génère une erreur.

    Merci d'avance pour vos conseils.

    P.
    Avec SimpleXML, il n'est pas possible d'accéder aux éléments et aux attributs du fichier en utilisant les méthodes habituelles lorsque ces éléments appartiennent à un espace de nom. Comme les explications risqueraient d'être un peu longues, je vous renvoie à deux références sur le sujet :

    1) http://www.sitepoint.com/simplexml-and-namespaces/
    (google : simplexml + namespaces)
    2) un livre : Robert Richards : Pro PHP XML and Web Services ; APRESS (919 pages). Pour votre problème, voyez pages 258-260.

    HTH

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Points : 53
    Points
    53
    Par défaut
    Je réagis un peu tard, mais en fait j'avais trouvé la solution à ce problème en utilisant le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xml = $product->children($namespaces['flux']); 
    	$prix= $xml->price;

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

Discussions similaires

  1. API Java pour parser un XML avec des balises avec nom de package
    Par rebelle49 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 11/08/2014, 13h22
  2. [SimpleXML] Parser XML avec balise imbriquée dans contenu (EAD)
    Par calitom dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/06/2014, 16h05
  3. Parser flux xml avec balises sur plusieurs niveaux
    Par Freedolphin dans le forum XQUERY/SGBD
    Réponses: 3
    Dernier message: 19/09/2011, 15h39
  4. [SimpleXML] Parser un flux xml avec SimpleXMLElement
    Par DeezerD dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/11/2006, 18h07

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