Problème lecture de fichier XML
23 messages
• Page 1 sur 2 • 1, 2
- death83
- WRInaute discret

- Messages: 90
- Inscription: 6 Jan 2006
Problème lecture de fichier XML
Salut a tous,
je suis en train d'essayer de lire un fichier XML (générer par le webservice d'amazon) en php mais je n'y arrive pas
.
J'ai essayer le code suivant:
Ou test1.xml est ma page XML.
En fait ca marche si on prend les tag comme il sont afficher par firefox.
C'est à dire:
Mais si j'enregistre ma page XML depuis firefox le premier tag se modifie:
Du coup ca ne marche plus.
Avez vous une idée qui me permettrais de résoudre se problème (ou d'arriver a lire mon fichier XML?
je suis en train d'essayer de lire un fichier XML (générer par le webservice d'amazon) en php mais je n'y arrive pas
J'ai essayer le code suivant:
- Code: Tout sélectionner
$xml=simplexml_load_file('test1.xml');
$xml->xpath('/ItemLookupResponse/Items/Item/Offers/Offer/OfferListing/Price/FormattedPrice');
$result = $xml->xpath('//FormattedPrice');
while(list( , $node) = each($result)) {
echo '/a/b/c: ',$node,"\n";
}
?>
Ou test1.xml est ma page XML.
En fait ca marche si on prend les tag comme il sont afficher par firefox.
C'est à dire:
<?xml version="1.0" encoding="UTF-8"?>
<ItemLookupResponse>
<Items>
<Item>
<Offers>
<Offer>
<OfferListing>
<Price>
<FormattedPrice>EUR 55,06</FormattedPrice>
</Price>
</OfferListing>
</Offer>
</Offers>
</Item>
</Items>
</ItemLookupResponse>
Mais si j'enregistre ma page XML depuis firefox le premier tag se modifie:
<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
<Items>
<Item>
<Offers>
<Offer>
<OfferListing>
<Price>
<FormattedPrice>EUR 55,06</FormattedPrice>
</Price>
</OfferListing>
</Offer>
</Offers>
</Item>
</Items>
</ItemLookupResponse>
Du coup ca ne marche plus.
Avez vous une idée qui me permettrais de résoudre se problème (ou d'arriver a lire mon fichier XML?
-

obi - WRInaute discret

- Messages: 238
- Inscription: 26 Juil 2006
C'est parti pour un peu de théorie sur XML ...
Cette directive spécifie l'espace de nommage xml (xmlns = XML Name SPace)
C'est ce qui garantit l'eXtensibilité du XML (qui veut dire eXtensible Mark-up Language), et permet de mélanger de façon valide plusieurs formats xml. Par exemple pour mélanger du html et du svg:
on colle l'étiquette ht au namespace html et g au namespace svg, et on peut mélanger les deux en préfixant lés éléments avec l'étiquette du namespace suivit de :
Comme on n'a pas envie d'écrire systématiquement toutes les étiquettes, si l'on ne met pas d'étiquette lors de la déclaration du namespace, comme c'est le cas dans ton fichier ou dans la pluspart des pages HTML, les éléments non préfixés par une étiquettes seront cherchés dans le ce namespace (appellé alors namespace par défaut)
L'URL du namespace est une chaine de carctères unique qui correspond à une DTD où à un schéma XML. Cette dernière déclare les éléments et attributs utilisables dans ce namespace.
Pour faire simple, dans ta deuxième citation, le namespace est bien celui d'amazon, il est normal qu'il précède l'utilisation du format XML d'amazon.
et ce n'est pas qqchose d'ajouté par ffox, car il ne peut pas en avoir connaissance si ce n'est pas spécifié dans le xml qu'il ouvre.
Désolé si tout ça est un peu technique et pas super bien expliqué, mais il faut dire que ce n'est pas simple
Si tu as des doutes sur ce que fait ffox, crache plutôt ça dans un fichier sur ton serveur ...
- Code: Tout sélectionner
xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05"
Cette directive spécifie l'espace de nommage xml (xmlns = XML Name SPace)
C'est ce qui garantit l'eXtensibilité du XML (qui veut dire eXtensible Mark-up Language), et permet de mélanger de façon valide plusieurs formats xml. Par exemple pour mélanger du html et du svg:
- Code: Tout sélectionner
<ht:html xmlns="ht:http://www.w3.org/1999/xhtml" >
..
<ht:body xmlns="g:http://www.w3.org/2000/svg" >
<g:rect x="0" y="0" ... />
<ht:p>Paragraphe</ht:p>
</ht:body>
on colle l'étiquette ht au namespace html et g au namespace svg, et on peut mélanger les deux en préfixant lés éléments avec l'étiquette du namespace suivit de :
Comme on n'a pas envie d'écrire systématiquement toutes les étiquettes, si l'on ne met pas d'étiquette lors de la déclaration du namespace, comme c'est le cas dans ton fichier ou dans la pluspart des pages HTML, les éléments non préfixés par une étiquettes seront cherchés dans le ce namespace (appellé alors namespace par défaut)
L'URL du namespace est une chaine de carctères unique qui correspond à une DTD où à un schéma XML. Cette dernière déclare les éléments et attributs utilisables dans ce namespace.
Pour faire simple, dans ta deuxième citation, le namespace est bien celui d'amazon, il est normal qu'il précède l'utilisation du format XML d'amazon.
et ce n'est pas qqchose d'ajouté par ffox, car il ne peut pas en avoir connaissance si ce n'est pas spécifié dans le xml qu'il ouvre.
Désolé si tout ça est un peu technique et pas super bien expliqué, mais il faut dire que ce n'est pas simple
Si tu as des doutes sur ce que fait ffox, crache plutôt ça dans un fichier sur ton serveur ...
- death83
- WRInaute discret

- Messages: 90
- Inscription: 6 Jan 2006
Ba lorsque j'effetue mon code avec la requette sur le XML d'amazon je n'ai aucun résultat.
Alors que lorsque j'effectue mon code en utilisant une page (que j'ai crée) et qui contient les meme balise (mais sans les xmlns=) ca marche.
Tu veut que je copie la page générer et celle que j'ai fait?
Alors que lorsque j'effectue mon code en utilisant une page (que j'ai crée) et qui contient les meme balise (mais sans les xmlns=) ca marche.
Tu veut que je copie la page générer et celle que j'ai fait?
- death83
- WRInaute discret

- Messages: 90
- Inscription: 6 Jan 2006
Voila la page générer par amazon:
http://webservices.amazon.fr/onca/xml?S ... oup=Offers
et le code qui marche chez moi:
http://webservices.amazon.fr/onca/xml?S ... oup=Offers
et le code qui marche chez moi:
- Code: Tout sélectionner
<ItemLookupResponse>
<Items>
<Item>
<Offers>
<Offer>
<OfferListing>
<Price>
<FormattedPrice>EUR 55,06</FormattedPrice>
</Price>
</OfferListing>
</Offer>
</Offers>
</Item>
</Items>
</ItemLookupResponse>
- death83
- WRInaute discret

- Messages: 90
- Inscription: 6 Jan 2006
Ba ca renvoie rien du tout quand je fait ca. J'ai refait le lien car celui au dessus ne marchai pas (il n'y avait pas la balise que je voulais).
J'ai essayé avec celui la:
http://webservices.amazon.fr/onca/xml?S ... oup=Offers
J'ai essayé avec celui la:
http://webservices.amazon.fr/onca/xml?S ... oup=Offers
-

Bacteries - WRInaute passionné

- Messages: 1369
- Inscription: 27 Mai 2004
Le namespace ne changera rien ton problème ne vient surement pas de là.
Et la balise de début c'est pour donner le type de doc ça ne sera pas pris en compte via un xpath.
Du coup c'est peut être ton chargement de fichier (depuis le site amazon) qui merde, regarde plus ton code PHP que le XML pour voir.
Déjà ça :
Tu fais une selection très précise mais tu l'enregistre pas et après tu prend un truc super générique (le "//"). l'erreur ne vient pas de là mais ça peut déjà être optimisé je pense.
Et la balise de début c'est pour donner le type de doc ça ne sera pas pris en compte via un xpath.
Du coup c'est peut être ton chargement de fichier (depuis le site amazon) qui merde, regarde plus ton code PHP que le XML pour voir.
Déjà ça :
- Code: Tout sélectionner
$xml->xpath('/ItemLookupResponse/Items/Item/Offers/Offer/OfferListing/Price/FormattedPrice');
$result = $xml->xpath('//FormattedPrice');
Tu fais une selection très précise mais tu l'enregistre pas et après tu prend un truc super générique (le "//"). l'erreur ne vient pas de là mais ça peut déjà être optimisé je pense.
- death83
- WRInaute discret

- Messages: 90
- Inscription: 6 Jan 2006
MagicYoyo a écrit:Question con... simple XML est une classe PHP5, non ?
Est-elle supportée par ton hébergement ?
Oui biensur, la je test en local avec WAMP mis en php 5.
Bacteries->
Actuellement mon code est:
- Code: Tout sélectionner
$xml=simplexml_load_file('test2.xml');
$result = $xml->xpath('//FormattedPrice');
while(list( , $node) = each($result)) {
echo 'Prix: ',$node,"\n";
}
le $xml->xpath('/ItemLookupResponse/Items/Item/Offers/Offer/OfferListing/Price/FormattedPrice'); était en commentaire.
Le chargement de fichier doit bien se faire vu qu'il ne renvoie pas d'erreur. Si je charde une page autre que XML ou une page qui n'existe pas il me renvoie une erreut. Alors que la c'est page blanche.
23 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- Lecture fichier XML
- problème de taille de fichier xml
- Problème ouverture fichier XML
- probléme d'interfaçage des fichier xml
- probleme du fichier xml de google sitemap
- Problème de parsage d'un gros fichier xml de 12 Go
- Problème avec mon fichier sitemap.xml
- Sitemap.xml: Problème de fichier dans Webmaster Tools
- Problème de configuration serveur - Type mime et fichier xml
- boucle sur une lecture xml ?
Consultez la description détaillée des produits ou services de Google suivants : API Google Checkout
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

