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 :

[XML] [XMLReader] expand() de XMLReader


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut [XML] [XMLReader] expand() de XMLReader
    Bonsoir,

    j'ai un petit soucis avec la fonction expand() de XMLHeader que je n'arrive pas à utiliser et j'ai trouvé aucune doc qui puisse m'aider ni sur le forum ni sur la toile :s

    Par exemple avec le xml suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    <evenement>
      <nom>Noel</nom>
      <lieu>Paris</lieu>
      <date>Decembre</date>
    </evenement>
    Je voudrais grâce à XMLReader atteindre tous les éléments lieu ayant la valeur Paris grâce au code suivant :

    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
    $reader = new XMLReader();
    $reader->open('fetes.xml');
     
    while ($reader->read()) {
    	if ($reader->localName == "lieu" && $reader->nodeType == XMLReader::ELEMENT) {
    		$reader->read();
    		if ($reader->value == 'Paris') {
     
                // A partir de la je voudrais atteindre les autres éléments de l'évènement à savoir 'date' et 'nom'
     
     
    			break;
    		}
    	}
    }
    Voila j'espère avoir été clair...

    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut


    Pourquoi n'utilises-tu pas SimpleXML qui est parfait pour faire ce que tu veux ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut
    Citation Envoyé par trotters213 Voir le message


    Pourquoi n'utilises-tu pas SimpleXML qui est parfait pour faire ce que tu veux ?
    Salut trotters,

    Ce sont plusieurs fichiers de milliers de lignes donc je me suis laissé dire que xmlreader était plus rapide. Et effectivement j'ai fait des tests et XMLReader est plus de 50% plus rapide !

    L'exemple que j'ai donnée est evidemment simplifié :p

  4. #4
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    En utilisant clone ?
    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
    while ($reader->read()) 
    {
      //si on arrive au noeud <evenement>, on le clone pour conserver une copie
      if ($reader->localName == 'evenement') $reader_copied = clone $reader; 
      if ($reader->localName == 'lieu' && $reader->nodeType == XMLReader::ELEMENT) 
      {
    		$reader->read();
    		if ($reader->value == 'Paris') 
        {
          $reader = $reader_copied; //on repart du noeud <evenement>
          $reader->read();//on avance pour lire le noeud après <evenement>
          while ($reader->localName != 'evenement') 
          {
            //tu récupères tes noeuds et tu fais tes traitements
            $reader->read();//pour faire avancer le curseur
          }
    		}
    	}
    }
    Bon voilà, c'est dans l'idée après c'est pas testé donc il y aura sûrement des erreurs relatives au placement du curseur. Je te laisse le soin de vérifier

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut
    Merci trotters je pense que ta technique est la bonne mais quand je lance le script, ya WAMP qui crache et je pense que c'est le clone qui me fait sa donc vu que je ne connais pas bien xmlreader je suis un peu dans le potage !

  6. #6
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    Il crash ? cad ? Tu as quoi comme erreur ?
    Il te faut PHP pour utiliser clone. Tu as quelle version de PHP ?

Discussions similaires

  1. [SAX] Can't create default XMLReader, is property org.xml.sax.driver set ?
    Par Cbonniot dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 19/01/2010, 12h17
  2. XML dans un database et Xmlreader
    Par xavDIP dans le forum VB.NET
    Réponses: 1
    Dernier message: 16/04/2009, 10h59
  3. [XML] [XMLReader] Contenu d'un fichier XML
    Par Kaldyris dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 12/01/2009, 14h11
  4. [XML] [XMLReader] xml quand tu nous tiens
    Par pimpmyride dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/05/2007, 20h28
  5. [XML] xmlreader namespace XMLDocument
    Par Oxy42 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 07/12/2006, 17h45

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