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

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 4
    Points
    4
    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 : 38
    Localisation : France, Gard (Languedoc Roussillon)

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


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

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 4
    Points
    4
    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 : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 4
    Points
    4
    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 : 38
    Localisation : France, Gard (Languedoc Roussillon)

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

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Oui j'ai PHP version 5. Quand je lance le script, WAMP s'arrête me disant qu'Apache a planté :s

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    J'ai pas pu tester mais tu dois avoir une boucle infini surement générée par le clone.
    Il faut que tu débuggues en te mettant des traces : au taf !

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    ^^, bon finalement sa faisait trop de magouilles d'utiliser XMLReader pour ce que je voulais faire alors je suis revenu à quelque chose de plus banal.

    J'ai une question qui n'a rien à voir mais je me demander par combien doit on diviser le temps d'analyse d'un xml externe entre un hebergement bas de gamme et un serveur dédié ?

    Merci encore de ton aide

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Citation Envoyé par Detere Voir le message
    ^^, bon finalement sa faisait trop de magouilles d'utiliser XMLReader pour ce que je voulais faire alors je suis revenu à quelque chose de plus banal.
    Comment as-tu fait ? Que ça puisse servir au prochain qui aura le même problème que toi

    Citation Envoyé par Detere Voir le message
    J'ai une question qui n'a rien à voir mais je me demander par combien doit on diviser le temps d'analyse d'un xml externe entre un hebergement bas de gamme et un serveur dédié ?
    Qu'est-ce que tu appelles un "hébergement bas de gamme" ? quel type de serveur dédié (tu peux mettre ton site sur ma vieille machine 90MHz avec 32Mo de ram, même si elle est "dédiée" ça ira moins vite qu'un hébergement bas de gamme ) ? Faut que tu fasses des tests je pense.

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