OVH Cloud OVH Cloud

Problème PHP et tableau XML

7 réponses
Avatar
Largudon
Bonjour à tous. J'ai un gros blocage dans la création d'un site et je ne
suis pas un pro du developpement... Voilà mon problème :

J'envoie une requête à un web service :

$r=@file("url__du_serveur?login=mon_login&password=mon_pw");

La réponse du serveur est un tableau XML.
Le problème est que je n'arrive pas à en extraire les valeurs pour en faire
des variables PHP.

echo ' '.$r.' ' me renvoie "Array"

echo ' '.$r[Email].' ' ne me renvoie rien du tout...

Comment faire ? Merci de votre aide.

PS : Voilà le type de tableau XML envoyé :


HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<Root xmlns="http://www.magikpass.com/">
<Etat>string</Etat>
<ErreurDescirption>string</ErreurDescirption>
<affilies>
<affilie>
<UserId>int</UserId>
<Email>string</Email>
<Login>string</Login>
<Password>string</Password>
<CivilityId>int</CivilityId>
<Name>string</Name>
<FirstName>string</FirstName>
<RoleId>int</RoleId>
<AssociateRate>int</AssociateRate>
<AssociationId>string</AssociationId>
<addresses>
<address d5p1:nil="true"
xmlns:d5p1="http://www.w3.org/2001/XMLSchema-instance" />
<address d5p1:nil="true"
xmlns:d5p1="http://www.w3.org/2001/XMLSchema-instance" />
</addresses>
<DefaultAddressId>int</DefaultAddressId>
<UserCategoryId>int</UserCategoryId>
<BirthDate>dateTime</BirthDate>
<IsAuthentified>boolean</IsAuthentified>
<IsContractSigned>boolean</IsContractSigned>
<Euro>boolean</Euro>
<GUID>string</GUID>
<FixedAssociateTransfer>int</FixedAssociateTransfer>
</affilie>
<affilie>
<UserId>int</UserId>
<Email>string</Email>
<Login>string</Login>
<Password>string</Password>
<CivilityId>int</CivilityId>
<Name>string</Name>
<FirstName>string</FirstName>
<RoleId>int</RoleId>
<AssociateRate>int</AssociateRate>
<AssociationId>string</AssociationId>
<addresses>
<address d5p1:nil="true"
xmlns:d5p1="http://www.w3.org/2001/XMLSchema-instance" />
<address d5p1:nil="true"
xmlns:d5p1="http://www.w3.org/2001/XMLSchema-instance" />
</addresses>
<DefaultAddressId>int</DefaultAddressId>
<UserCategoryId>int</UserCategoryId>
<BirthDate>dateTime</BirthDate>
<IsAuthentified>boolean</IsAuthentified>
<IsContractSigned>boolean</IsContractSigned>
<Euro>boolean</Euro>
<GUID>string</GUID>
<FixedAssociateTransfer>int</FixedAssociateTransfer>
</affilie>
</affilies>
</Root>

7 réponses

Avatar
Bruno Desthuilliers
Largudon wrote:
Bonjour à tous. J'ai un gros blocage dans la création d'un site et je ne
suis pas un pro du developpement... Voilà mon problème :

J'envoie une requête à un web service :

$r=@file("url__du_serveur?login=mon_login&password=mon_pw");

La réponse du serveur est un tableau XML.


C'est quoi un 'tableau XML' ?-)

Le problème est que je n'arrive pas à en extraire les valeurs pour en faire
des variables PHP.

echo ' '.$r.' ' me renvoie "Array"

echo ' '.$r[Email].' ' ne me renvoie rien du tout...


http://www.php.net/manual/en/function.file.php :
file -- Reads entire file into an array
Identical to readfile(), except that file() returns the file in an
array. Each element of the array corresponds to a line in the file, with
the newline still attached. Upon failure, file() returns FALSE.

Bref, chaque ligne de ton fichier se retrouve à l'indice du tableau
correspondant au n° de ligne (la numérotation commençant à zéro). Ce qui
est totalement sans intérêt dans le cas d'un fichier XML, puisque les
sauts de ligne n'apportent aucune info sur la structure des données (il
pourrait aussi bien n'y avoir qu'une seule ligne sans rien changer à la
signification du fichier).

Comment faire ? Merci de votre aide.


Comme tu ne peux pas te fier au fait que "une ligne = une balise" (car
rien ne te garantit que ce sera toujours le cas), il faut utiliser les
technos appropriées pour lire et analyser du XML, ie :
- les parseurs sax :
http://www.php.net/manual/en/ref.xml.php
- les parseurs DOM :
http://www.php.net/manual/en/ref.domxml.php
- et éventuellement XSLT :
http://www.php.net/manual/en/ref.xslt.php

La solution à choisir dépend du résultat à atteindre. Mais le plus
simple est très probablement le parseur sax. Je te renvoie à la doc pour
plus d'infos et quelques exemples - *une fois que tu l'aura lue*,
n'hésite pas à reposter ici si tu coinces !-)


PS : Voilà le type de tableau XML envoyé :


Ce n'est pas un 'tableau XML', c'est un tableau de chaines contenant des
balises XML. NB : lit plutôt le fichier d'un seul coup si c'est possible.

(snip XML)

Mes deux centimes,
Bruno

Avatar
Pimousse
echo ' '.$r.' ' me renvoie "Array"

echo ' '.$r[Email].' ' ne me renvoie rien du tout...


et un echo $r['Email'] ?

Avatar
Gibier Jean-Charles
"Bruno Desthuilliers" a écrit dans
le message news: 401d4109$0$32620$

Ce n'est pas un 'tableau XML', c'est un tableau de chaines contenant des
balises XML. NB : lit plutôt le fichier d'un seul coup si c'est possible.

(snip XML)



Un peut HS mais je me renseigne. D'après ce que j'ai cru comprendre avec
PHP5 les variables peuvent être nativement affectées à partir de valeurs ou
d'attributs de fichiers XML. Est ce exact ou rêve-je ? Quelqu'un peut il
nous faire profiter de son expérience ?

--
Jean-Charles Gibier
[--- A mon grand dam, mon adresse est anti-spam ---]
[Appliquez lui la formule magique sed -e "s/_*._//"]
[Contribuez à une paie libre: http://www.phpaie.net]

Avatar
Eric Daspet
Gibier Jean-Charles wrote:
Un peut HS mais je me renseigne. D'après ce que j'ai cru comprendre avec
PHP5 les variables peuvent être nativement affectées à partir de valeurs ou
d'attributs de fichiers XML. Est ce exact ou rêve-je ? Quelqu'un peut il
nous faire profiter de son expérience ?


Concernant le XML et PHP5 je peux probablement aider, par contre je ne
vois pas bien ce que tu veux dire avec en parlant de "variables
nativement affectées ....".

Dans PHP5 on retrouve deux nouveaux modules XML, le premier est une
implémentation DOM qui prendra la suite de domxml. La différence avec
cette dernière c'est que le nouveau module vise l'implémentation
complète et conforme des spécifications officielles. Rien de bien
nouveau concernant les méthodes d'accès, donc.

Le second module est SimpleXML. Il s'agit en gros de transformer l'arbre
XML en une architecture d'objets simples et un minimum de complexité.

Avec le code XML suivant :
<a>
<b>
<c>texte 1<c>
<d>texte 2</d>
</b>
<b attrib="valeur">
<c>texte 3<c>
<c>texte 4</c>
</b>
<b2> test </b2>
</a>


On pourra avoir un code du style :

// chargement du fichier XML, renvoie l'élément racine <a>
$a = simplexml_load_file(...) ;
// itérations à travers les éléments fils de <a> du nom de <b>
foreach($a->b as $b) {
// test de présence d'un attribut
if ( isset($b['attrib']) ) {
// lecture d'un attribut
echo '<b> a l'attribut ', $b['attrib'], '<br>' ;
} else {
// lecture du contenu texte
echo '<d> contient ', $b->d , '<br>' ;
// écriture d'un attribut
$b['hello'] = 'world' ;
}
}
// écriture du fichier
$a->asXML('fichier.xml') ;

Si ça ne répond pas à ta question n'hésites pas à repréciser ta question.

--
Eric Daspet

Avatar
Frederic Jacquot

Un peut HS mais je me renseigne. D'après ce que j'ai cru comprendre avec
PHP5 les variables peuvent être nativement affectées à partir de valeurs
ou d'attributs de fichiers XML. Est ce exact ou rêve-je ? Quelqu'un peut
il nous faire profiter de son expérience ?


J'aurais aussi aimé savoir mais ma derniere tentative avec la beta de PHP5
n'a pas été concluante (segfault au chargement d'une page). Reste à être
patient...

--
Frédéric

Avatar
Gibier Jean-Charles
"Eric Daspet" a écrit dans le message news:
401e5cd8$0$18973$

Si ça ne répond pas à ta question n'hésites pas à repréciser ta question.



C'est exactement ça ;-)
Aussi par variables nativement affectées je faisais référence à la fonction
'simplexml_load_file'.
Par natif j' entend le fait que la fonction est définie dans le moteur de
PHP5, ce n'est peut être pas le cas,mais dans ce cas c'est qu'elle fait
partie partie d'une extention de PHP5. Mais quoiqu'il en soit c'est
quasiment transparent pour l'utilisateur et ça c'est pas mal.

Avatar
Etienne SOBOLE
"Largudon" a écrit dans le message de
news:BC42DF66.25C%

Bonjour à tous. J'ai un gros blocage dans la création d'un site et je ne
suis pas un pro du developpement...


alors la t'es mal barré parce que le XML c'est chiant

Voilà mon problème :
J'envoie une requête à un web service :
$r=@file("url__du_serveur?login=mon_login&password=mon_pw");
La réponse du serveur est un tableau XML.
Le problème est que je n'arrive pas à en extraire les valeurs pour en
faire

des variables PHP.


tu trouveras plein d'exemples la!
http://fr2.php.net/manual/fr/function.xml-parse.php

echo ' '.$r.' ' me renvoie "Array"
echo ' '.$r[Email].' ' ne me renvoie rien du tout...
Comment faire ? Merci de votre aide.


le truc c'est de convertir ton fichier en arborescence d'objet PHP.

PS : Voilà le type de tableau XML envoyé :
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length


bonheur. de l'utf-8
bon ben sur la lancée, pense a utf8_decode. tu en auras beoin

Etienne