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] Afficher les noms de tous les noeuds enfants


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 18
    Points : 10
    Points
    10
    Par défaut [SimpleXML] Afficher les noms de tous les noeuds enfants
    Bonjour,

    Voilà, je suis actuellement sur un projet et je souhaiterais pouvoir récupérer, d'un fichier XML, les noms de tous les noeuds enfants.

    J'ai pensé faire comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $xml = new SimpleXMLElement($xmlContent);
    return $xml->xpath('//site/child::*/name()');
    Malheuresment, la requête ne fonctionne pas comme il s'agit de XPath 2.0

    J'ai alors tenté avec cette requête:
    Mais sa ne me retourne absoluement rien.. Est-ce que quelqu'un aurait une idée?


    D'avance merci!

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Tu dois utiliser un prédicat.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $noeudEnfant = $xml->xpath('//site/[name()]');
     
    print_r($noeudEnfant);

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Warning: SimpleXMLElement::xpath() [simplexmlelement.xpath]: Invalid expression in /var/www/easyweb/application/models/XmlWorker.php on line 12
     
    Warning: SimpleXMLElement::xpath() [simplexmlelement.xpath]: xmlXPathEval: evaluation failed in /var/www/easyweb/application/models/XmlWorker.php on line 12
    D'ailleurs, avec xmlspy sa ne marche pas, ni en xpath 2.0

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Le slash est en trop entre l'élément et le prédicat...

    Si tu veux tous les noms de nœud de ton document, il faut utiliser descendant.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $noeudDoc = $xml->xpath('//descendant::site[name()]');

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Okay, alors sa ne marche finalement et pour arreter de ma casser la tête j'ai décidé d'ajouter un attribut obligatoire dans chaque noeud enfant, et je liste par ces attributs, c'est plus simple

    Mais si quelqu'un a un jour la solution, qu'il n'hésite pas à me la mp.


    Merci encore

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Cela fonctionne parfaitement.

    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
    $xmlContent = <<<XML
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <root>
      <plop>
         <plouf>ah</plouf>
      </plop>
      <plip>oh</plip>
      <plap>ah</plap>
    </root>
    XML;
     
    $xml = new SimpleXMLElement($xmlContent);
    $noeudEnfant = $xml->xpath('//child::root[name()]');
     
    foreach( $noeudEnfant[0] as $k => $obj )
       echo $k;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/04/2013, 11h29
  2. [XSLT] Transformer les noeuds enfants en attribut du premier noeud
    Par le_chomeur dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2008, 13h57
  3. JTree : Sélectionner les noeuds enfants
    Par Lebas dans le forum Composants
    Réponses: 4
    Dernier message: 26/01/2007, 15h32
  4. Supprimer tous les noeuds enfants
    Par Givemefive dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/01/2007, 12h39
  5. Réponses: 2
    Dernier message: 13/12/2006, 20h30

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