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

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] problème de lecture d'un attribut


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 41
    Par défaut [SimpleXML] 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $count = count($document->xpath(utf8_encode("//products/product/fields[region='$region']")));
    // 1 pour lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>
    ';
     }

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 355
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 355
    Billets dans le blog
    17
    Par défaut
    Je pense que c'est à cause du délimiteur ' dans ton XPath :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //products/product[fields/region='$region']
    Le moteur XPath se retrouve avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //products/product[fields/region='Provence - Côte d'Azur']
    Change ton XPath en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //products/product[fields/region="$region"]
    Soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xpath = "//products/product[fields/region=\"$region\"]" ;

  3. #3
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 41
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Je pense que c'est à cause du délimiteur ' dans ton XPath :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //products/product[fields/region='$region']
    Le moteur XPath se retrouve avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //products/product[fields/region='Provence - Côte d'Azur']
    Change ton XPath en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //products/product[fields/region="$region"]
    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $xpath = "//products/product[fields/region=\"$region\"]" ;

    Vraiment merci !

    l'explication est tout aussi juste que la solution
    sur laquelle je butais !

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/12/2011, 05h50
  2. [SimpleXML] Problème de récuperation d'attribut
    Par mitchb dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/08/2007, 13h43
  3. problème de lecture base de registre
    Par pafounet3 dans le forum MFC
    Réponses: 10
    Dernier message: 31/12/2003, 15h06
  4. [fread] Problème de lecture de buffer
    Par karl3i dans le forum C
    Réponses: 2
    Dernier message: 25/09/2003, 10h21
  5. Réponses: 4
    Dernier message: 23/07/2003, 14h07

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