Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/05/2011, 17h24   #1
Invité de passage
 
pat ludo
Inscription : novembre 2009
Messages : 29
Détails du profil
Informations personnelles :
Nom : pat ludo

Informations forums :
Inscription : novembre 2009
Messages : 29
Points : 0
Points : 0
Par défaut problème de lecture d'un attribut

Bonjour,

Je parsse très bien un fichier xml avec simplexml de la forme ISO 8859-1

Avec ces 2 lignes

// 1 count pour gérer la pagination
Code :
$count = count($document->xpath(utf8_encode("//products/product/fields[region='$region']")));
// 1 pour lire
Code :
$produits = $document->xpath(utf8_encode("//products/product[fields/region='$region'][position()>=$debut_pos and position()<$fin_pos]"));
J'encode de manière à pouvoir lire les accents, j'ai par exemple
<region>Pays de la Loire-Vendée</region> et cela se passe très bien pour compter et lire le fichier xml.
l'attribut région sert à trier évidemment !

Or j'ai un attribut région à lire et là je ne peux lire ni compter avec count
<region>Provence - Côte d'Azur</region>

Je me suis apperçu que j'avais le même souçi avec les villes Les Sables d'Olonne
par exemple, donc cela viens de l'apostrophe (') d'azur par ex.

Problème, je ne vois pas que faire à cela !
mon expression x path est mal écrite ? mais elle fonctionne sauf
dans ce cas précis !

Merci d'avance pour un avis

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?xml version="1.0" encoding="ISO-8859-1" ?> 
- <products>
- <product>
  <name></name> 
  <productUrl></productUrl> 
  <imageUrl></imageUrl> 
  <description></description> 
  <TDProductId></TDProductId> 
- <fields>
  <region>Provence - Côte d'Azur</region>
  </fields>
  </product>

Code :
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
27
28
29
30
31
32
33
 
 
// On récupère la ville
if (isset($_GET['ob'])) { $objet=$_GET['ob']; } else {$objet = "";}
 
$ina = array("provence-cote-d-azur","sud-ouest", ... ");
$outa = array("Provence - Côte d'Azur","Sud Ouest", ... ");
$region = str_replace($ina, $outa, $objet); 
 
<?php 
define('NB_PAR_PAGE', 10); 
 
// On récupère le num de page sur laquelle on est pagination
 
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;   
$document = simplexml_load_file('produits.xml');
 
 $count = count($document->xpath(utf8_encode("//products/product/fields[region='$region']")));  
 
$debut_pos = ($page - 1) * NB_PAR_PAGE + 1; 
$fin_pos = $page * NB_PAR_PAGE + 1;
$derniere_page = ceil($count / NB_PAR_PAGE);
 
 $produits = $document->xpath(utf8_encode("//products/product[fields/region='$region'][position()>=$debut_pos and position()<$fin_pos]"));
// print_r($produits);
 
 
 foreach ($produits as $produit) {
 
echo'
<h3><a href="/n/url?'.url_encrypt($produit->productUrl).'" rel="nofollow" /> '. utf8_decode($produit->name) .'</a></h3>
';
 }
manuso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 17h42   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Je pense que c'est à cause du délimiteur ' dans ton XPath :

Code :
//products/product[fields/region='$region']
Le moteur XPath se retrouve avec :

Code :
//products/product[fields/region='Provence - Côte d'Azur']
Change ton XPath en :

Code :
//products/product[fields/region="$region"]
Soit :

Code :
$xpath = "//products/product[fields/region=\"$region\"]" ;
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 18h30   #3
Invité de passage
 
pat ludo
Inscription : novembre 2009
Messages : 29
Détails du profil
Informations personnelles :
Nom : pat ludo

Informations forums :
Inscription : novembre 2009
Messages : 29
Points : 0
Points : 0
Citation:
Envoyé par Séb. Voir le message
Je pense que c'est à cause du délimiteur ' dans ton XPath :

Code :
//products/product[fields/region='$region']
Le moteur XPath se retrouve avec :

Code :
//products/product[fields/region='Provence - Côte d'Azur']
Change ton XPath en :

Code :
//products/product[fields/region="$region"]
Soit :
Code :
1
2
 
$xpath = "//products/product[fields/region=\"$region\"]" ;

Vraiment merci !

l'explication est tout aussi juste que la solution
sur laquelle je butais !
manuso est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h52.


 
 
 
 
Partenaires

Hébergement Web