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 :

array map ne fonctionne pas pour parser un fichier xml


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 63
    Par défaut array map ne fonctionne pas pour parser un fichier xml
    Bonjour à tous,

    Je m'excuse d'avance car je suis un débutant, et je bloque sur un soucis depuis des heures

    Voici mon fichier xml :

    Code xml : 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
    <hash>
    <languages type="array">
    	<language>es</language>
    </languages>
    <profile-pic>https...</profile-pic>
    <videos type="array"/>
    <photos type="array">
    	<photo>
    		<thumb>https...</thumb>
    		<full>https...</full>
    	</photo>
    	<photo>
    		<thumb>https...</thumb>
    		<full>https...</full>
    	</photo>
    	<photo>
    		<thumb>https...</thumb>
    		<full>https...</full>
    	</photo>
    </photos>

    J'arrive à récupérer les languages comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $entry = $xpath->evaluate('/hash');
    $languages = array_map(
          function(\DOMElement $node) {
              return $node->textContent;
          },
          iterator_to_array($xpath->evaluate('languages/language', $entry))
        );
    echo implode(',', $languages);
    Par contre pour récupérer les photos impossible !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $entry = $xpath->evaluate('/hash');
    $photos = array_map(
                function(\DOMElement $node) {
                    return $node->textContent;
                },
                iterator_to_array($xpath->evaluate('photos/photo/thumb', $entry))
            );
            $images = implode(',', $photos);
    j'ai carrément une erreur 500 !

    Merci d'avance si un fin connaisseur pourrait m'éclairer
    bonne soirée

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Les deux codes ne marchent pas: $entry est de type DOMNodeList et non DOMNode comme l'attend le deuxième paramètre de DOMXPath::evaluate().

    Donc il suffit de remplacer $entry par $entry->item(0).




    On peut aussi se la jouer comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $xpath->registerNamespace('php', 'http://php.net/xpath');
    $xpath->registerPHPFunctions('fnjoin');
     
    function fnjoin($nodes, $glue) {
        return implode($glue, array_map(fn($n) => $n->textContent, $nodes));
    }
     
    echo $xpath->evaluate('php:function("fnjoin", photos/photo/thumb, ",")', $entry->item(0));
    On évite de cette manière iterator_to_array et la requête XPath renvoie directement le résultat.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/03/2014, 20h24
  2. [DOM4J] Problème pour "parser" un fichier XML avec accents
    Par mlny84 dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 26/11/2007, 19h06
  3. Réponses: 1
    Dernier message: 09/10/2007, 19h31
  4. [JDOM] Problème pour parser un fichier XML [débutant]
    Par adn013 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/05/2007, 12h00
  5. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32

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