Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1406 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Parser un flux xml

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Parser un flux xml

n°1416112
jacques33-​40
Vivre c'est déjà lutter !
Posté le 30-07-2006 à 19:25:25  profilanswer
 

Bonjour,
 
J’ai un souci pour extraire les données d’un flux xml que je reçois :
Pour exemple et pour simplifier, voici un fichier de structure identique (mais allégé ici)
 
Je reçois donc ceci:
 

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  3.   <soap:Body>
  4.    <ListCarsResponse xmlns="http://blablabla.com/webservices/">
  5.     <ListCarsResult>
  6.      <CAR_list xmlns="http://blablabla.com/webservices/CAR_list.xsd">
  7.       <Product ProductId="13956" provider="MySelf" name="Peugeot" type="106">
  8.        <ColorType productId="13956;19630" name="Black">
  9.        </ColorType>
  10.       </Product>
  11.       <Product ProductId="22568" provider="MySelf" name="Peugeot" type="406">
  12.        <ColorType productId="22568;24575" name="Red">
  13.        </ColorType>
  14.       </Product>
  15.      </CAR_list>
  16.     </ListCarsResult>
  17.    </ListCarsResponse>
  18. </soap:Body>
  19. </soap:Envelope>


 
si je simplifie mon fichier comme ça :
 

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2.      <CAR_list xmlns="http://blablabla.com/webservices/CAR_list.xsd">
  3.       <Product ProductId="13956" provider="MySelf" name="Peugeot" type="106">
  4.        <ColorType productId="13956;19630" name="Black">
  5.        </ColorType>
  6.       </Product>
  7.       <Product ProductId="22568" provider="MySelf" name="Peugeot" type="406">
  8.        <ColorType productId="22568;24575" name="Red">
  9.        </ColorType>
  10.       </Product>
  11.      </CAR_list>


 
alors avec quelques « foreach », je récupere ce que je veux ..
 
 
 

Code :
  1. $Product = $xml->xpath('//Product');
  2. foreach ($xml as $Product) {
  3. echo $Product['ProductId']."<BR>";
  4. echo $Product['name']."<BR>";
  5. echo $Product['type']."<BR>";
  6. foreach ($Product as $ColorType) {
  7. echo $ColorType['productId']."<BR>";
  8. echo $ColorType['name']."<BR>";
  9. }
  10. }


 
Mais comment faire face à la structure que je reçois ?
A cause notamment des « : » dans le tag de « Body » ou celui d’ « Envelop » je n’arrive pas a exprimer mon xpath.
 
Quelqu’un a-t-il une solution ??
 
Merci d’avance

mood
Publicité
Posté le 30-07-2006 à 19:25:25  profilanswer
 

n°1416144
rx__
Paint It Black
Posté le 30-07-2006 à 21:17:55  profilanswer
 

Si je ne me trompe pas avec

Code :
  1. $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/');
  2. $Product = $xml->xpath('//soap:Product');

Cela dit n'oublie pas qu'il y a une API SOAP dans PHP...

n°1416162
sho320
Posté le 30-07-2006 à 22:05:23  profilanswer
 

Tu peux te tourner vers l'analyseur syntaxique XML de PHP et notamment la fonction xml_parser_create_ns()

n°1416630
jacques33-​40
Vivre c'est déjà lutter !
Posté le 31-07-2006 à 14:41:17  profilanswer
 

Bonjour rx_,
 
Merci de ton conseil. Je pensais effectivement explorer du coté de "registerXPathNamespace". Mais j'ai du mal à faire fonctionner mon exemple avec... Pourtant, je pense que ça doit aporter la solution que je recherche...Peux-tu regader à nouveau?

n°1416949
rx__
Paint It Black
Posté le 31-07-2006 à 20:58:13  profilanswer
 

Effectivement je n'arrive pas à charger le document, il est vide après le simplexml_load_file ou _load_string. Ca semble venir du namespace parce qu'avec ce document-ci ça marche

Code :
  1. <?xml version='1.0'?>
  2. <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
  3. <Body />
  4. </Envelope>

mais avec celui-ci ça ne marche pas

Code :
  1. <?xml version='1.0'?>
  2. <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  3. <soap:Body />
  4. </soap:Envelope>

Pourtant sémantiquement c'est équivalent...
 
Donc comme dit Sho320, tu peux jeter un coup d'oeil à l'autre API XML.

n°1417098
jacques33-​40
Vivre c'est déjà lutter !
Posté le 31-07-2006 à 23:51:49  profilanswer
 

Ok les amis, vos conseils ont guidés mes recherches et j'ai trouvé un truc très sympa sur la toile, surtout pour ce comme moi qui ne maitrise pas bien le parsing xml en PHP5...
http://www.ctindustries.net/talks/ [...] eb_srv.ppt  
Voici le lien, bonne doc avec plein d'exemples, c'est relativement complet et mérite à mon sens à être connu !
 
Bonne fin de soirée et a bientôt,


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Parser un flux xml

 

Sujets relatifs
Problème avec les fluxParser flux RSS
[PHP] PHP et flux rssParser un fichier xml volumineux sur plusieurs pages ?
Parser un xml sur plusieurs pages ?afficher flux vidéo sur une MIDlet
Cherche une API JAVA pour parser une DTD[Résolu] parser un fichier xml en ignorant le DTD
probleme pour parser flux xml[SAX] Parser un flux reseau a la volee
Plus de sujets relatifs à : Parser un flux xml


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR