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

Langage PHP Discussion :

Analyse XML impossible sur une partie de code


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 41
    Points : 27
    Points
    27
    Par défaut Analyse XML impossible sur une partie de code
    Bonjour

    Je travaille sur une api et je n'arrive pas à comprendre pourquoi mon parsing n'est pas complet en effet je récupère
    uniquement les titres avec le code ci-dessous, mais pas les autres attributs .
    Pourtant il me semble que la hiérachie est correct.
    Le fichier xml test est à cette adresse cette partie du parsing est en bas du fichier.
    http://sandbox.api.shopping.com/publ...esWithValues=5
    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
     
    1) 
    foreach($parser->document->categories[0]->category[0]->attributes[0]->attribute as $attributes) { 
    echo "<div id=total_matches_container><div id=total_matches><div id=total_num_of_matches>".$attributes->name[0]->tagData;"</div>"; 
     
    Affiche les titres: Price Range - Processor Type - Brand 
     
    2) 
    echo "<br><span class='result_list'><a href='".$attributes->attributeValues[0]->attributevalue[0]->tagAttrs['id']."'>".$attributes->attributevalues[0]->attributevalue[0]->name[0]->tagData."</a></span></div></div>"; 
     
    Affiche seulement le premier attribut de chaque titre ci-dessus alors quil y en a 5
    Price Range      	 Brand
    Below $520 -     	 Pionerpos
    mais il manque        etc.
    $750 - $1110 
    $1110 - $1540
    etc
    J'ai l'impression, qu'il faut faire une boucle en 2 mais je n'arrive pas à l'écrire
    correctement en (3), je me retrouve avec l'echelle des prix sous tous les titres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    3)
    foreach ($parser->document->categories[0]->category[0]->attributes[0]->attribute[0]->attributevalues[0]->attributevalue as $attributevalues){
    echo "<div class='offertitle'>".$attributevalues->name[0]->tagData."</a></div>";
    Si on peut m'éclairer car je ne comprends pas.

    merci
    manuso

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    montre nous un petit exemple complet qui ne fonctionne pas

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par mathieu Voir le message
    montre nous un petit exemple complet qui ne fonctionne pas
    Pour mieux comprendre, ici un fichier qui fonctionne bien
    tout en haut avec les 5 titres et les attributs dessous
    http://techreviewsource.com/shopping...php?k=Desktops

    toujours avec le même fichier xml parsé
    http://sandbox.api.shopping.com/publ...esWithValues=5

    Alors que j'obtiens au mieux ceci avec mon code qui s'arrête
    au premier attribut Below $490, PIONEERPOS, Blu-Ray ,etc.
    comme ci-dessous:

    Find by Price Range
    Below $490

    Find by Brand
    PIONEERPOS

    Find by Optical Drive Type
    Blu-Ray

    Find by Installed RAM
    At least 8 GB

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    j'aimerai surtout un exemple complet de code qui ne fonctionne pas

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par mathieu Voir le message
    j'aimerai surtout un exemple complet de code qui ne fonctionne pas

    Ah oui pardon évidemment ! j'ai mis un exemple complet
    ici pour mieux comprendre

    http://www.listepro.com/test/Televis...at,96252,1.htm

    manuso

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par mathieu Voir le message
    j'aimerai surtout un exemple complet de code qui ne fonctionne pas
    Je reviens sur la question que j'avais soumise, avec une démo ci-jointe pour mieux comprendre.
    http://www.listepro.com/test/Televis...at,96252,1.htm
    C'est incompréhensible à ce point ? ou il manque encore des éléments car il me semble avoir indiqué l'essentiel pourtant.

  7. #7
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    salut,

    peux tu reformuler ta question stp? perso, je comprends presque rien^^
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Thes32 Voir le message
    salut,

    peux tu reformuler ta question stp? perso, je comprends presque rien^^
    Bien décidément j'ai bien du mal, voila je parse un fichier xml
    et j'obtiens cela


    You found 6328 matches.
    -Price Range
    Below $490
    -Brand
    ASUS
    -Installed RAM
    At least 8 GB
    -Form Factor
    All-in-one
    -Graphic Card
    NVIDIA
    c'est ici même
    http://www.listepro.com/test/Televis...at,96252,1.htm
    avec le code en dessous

    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
     
    //* XML Parser Class (php4) 
    //Set up the parser object 
    $parser = new XMLParser($xml); 
    //Work the magic...
    $parser->Parse(); 
    ....
     
    $category = $parser->document->categories[0]->category[0]; //ok
    $match_count = $category->items[0]->tagAttrs['matcheditemcount']; //ok
    // nombre de resltats ok
    echo "
    You found $match_count matches.
    "; //ok 
     
    // titres ok (Price Range, Brand, Optical Drive Type, Graphic Card, Installed RAM) 
     
    foreach($parser->document->categories[0]->category[0]->attributes[0]->attribute as $attributes) { echo "
    ".$attributes->name[0]->tagData;"
    "; 
    // 3
    echo "
    ".$attributes->attributevalues[0]->attributevalue[0]->name[0]->tagData.""; }

    Alors que je voudrais afficher cela
    http://techreviewsource.com/shopping...php?k=Desktops

    -Find by Price Range
    Below $490
    $490 - $770
    $770 - $1170
    $1170 - $1610
    Above $1610
    -Find by Processor Type
    Intel Core
    Intel Celeron
    AMD Athlon
    Intel Atom
    Intel Xeon
    -Find by Optical Drive Type
    Blu-Ray
    Blu-Ray Burner
    CD Burner
    CD-ROM
    DVD Burner
    - Find by Monitor
    With Monitor
    Without Monitor

    En gros pour faire simple et juste avec le premier cas (echelle de prix) mon code affiche juste:

    Find by Price Range
    -Below $490

    Alors que je voudrais au complet afficher cela:

    Find by Price Range
    -Below $490
    $490 - $770
    $770 - $1170
    $1170 - $1610
    Above $1610

    Et le fichier parsé c'est celui-ci
    http://sandbox.api.shopping.com/publ...esWithValues=5

    Donc moi ce que je ne comprend pas c'est pourquoi le parsing s'arrête ?

    merci
    manuso

  9. #9
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Donc moi ce que je ne comprend pas c'est pourquoi le parsing s'arrête ?
    Tu as un message d'erreur ? as tu vérifier ta (tes) boucle(s) ?
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Thes32 Voir le message
    Tu as un message d'erreur ? as tu vérifier ta (tes) boucle(s) ?
    Non, il ne n'y a aucun message d'erreur la boucle est parfaite, mais elle ne me permet pas d'obtenir ce que je veux, donc mon idée est que si la 1ere boucle développe bien les 5 titres, il en faut une également à ce niveau
    du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo "
    ".$attributes->attributevalues[0]->attributevalue[0]->name[0]->tagData.""; }
    mais mon niveau php est un peu faible, 2 boucles imbriqués ou quelque chose
    dans ce genre je ne sais pas l'écrire.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Thes32 Voir le message
    Tu as un message d'erreur ? as tu vérifier ta (tes) boucle(s) ?
    Ce qui me confirme cette hypothèse c'est que si j'écris ce code, on en est pas loin mais ce n'est pas encore cela, répétition sous tous les titres de l'echelle de prix donc la 2ieme boucle est mal écrite.
    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
     
    $category = $parser->document->categories[0]->category[0]; //ok
    $match_count = $category->items[0]->tagAttrs['matcheditemcount']; //ok
    $attributes = $category->attributes[0]->attribute[0]; 
    // nombre de resltats ok
    echo "<div id='total_num_of_matches_container'><div id='total_num_of_matches'>You found $match_count matches.\n</div>"; //ok
     
    1//
    foreach($parser->document->categories[0]->category[0]->attributes[0]->attribute as $attributes) 
    {
    echo "<div id=total_matches_container><div id=total_matches><div id=total_num_of_matches> ".$attributes->name[0]->tagData;"</div>"; 
     
    2//
    foreach ($parser->document->categories[0]->category[0]->attributes[0]->attribute[0]->attributevalues[0]->attributevalue as $attributevalues){
    echo "<div class='offertitle'>".$attributevalues->name[0]->tagData."</a></div>";
    }
    }
    Affiche;

    Find by Price Range
    Below $490
    $490 - $770
    $770 - $1170
    $1170 - $1610
    Above $1610
    Find by Brand
    Below $490
    $490 - $770
    $770 - $1170
    $1170 - $1610
    Above $1610
    Find by Installed RAM
    Below $490
    $490 - $770
    $770 - $1170
    $1170 - $1610
    Above $1610
    Find by Form Factor
    Below $490
    $490 - $770
    $770 - $1170
    $1170 - $1610
    Above $1610

Discussions similaires

  1. Validation d'une partie d'un XML sur une partie d'un XSD
    Par EJO64 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 02/02/2015, 09h05
  2. Réponses: 7
    Dernier message: 27/05/2013, 12h33
  3. Réponses: 5
    Dernier message: 28/08/2007, 14h00
  4. Indenter une partie du code
    Par KooX dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 23/05/2004, 17h38

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