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 :

[DOM] Nombre de nœuds dans un XML


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Par défaut [DOM] Nombre de nœuds dans un XML
    hey salut


    j'ai un code qui lit des données à partir d'un fichier XML, et les affiche dans une table html, mon probléme c'est que la lecture n'est pas compléte, c.-à.d. qu'il y a des noeuds à la fin du fichier qui ne sont pas lus, je connais la cause de probléme mais je n'arrive pas à le regler.

    Je vous montre mon code pour commencer !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $fiches = $dom->getElementsByTagName('fiche');
    $F=array();
    $total=0;
    foreach ($fiches as $lesfiches)
    { 
    	$total++;
    }
    Ce bout de code c'est pour savoir combien de noeuds le fichier XML contient

    ensuite :

    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
    24
    25
    26
    for($i=1;$i<=$total;$i++)
    							{
    								if ($fiche = getFicheById($dom, $i)) {
    								$nom = getVarByName($fiche,'nom');
    								$prenom = getVarByName($fiche,'prenom');
    								$statut = getVarByName($fiche,'statut');
    								$pw = getVarByName($fiche, 'pageWebPerso');
    								$pwg = getVarByName($fiche, 'pageWebGRMIAO');
    								$photo = getVarByName($fiche, 'photo');
    								$dis = getVarByName($fiche, 'distinctions');
    								$imp = getVarByName($fiche, 'implicationprojet');
     
    								echo"<tr>
    										<td align=\"center\">$nom</td>
    										<td align=\"center\">$prenom</td>
    										<td align=\"center\">$statut</td>
    										<td align=\"center\">$pw</td>
    										<td align=\"center\">$pwg</td>
    										<td align=\"center\">$photo</td>
    										<td align=\"center\">$dis</td>
    										<td align=\"center\">$imp</td>
    										<td align=\"center\"><input type='checkbox' name=selection[] value=$i> </td>";
    								}
     
     
    							}
    la boucle for est supposée lire tous les noeuds, mais le probléme c'est que les id dans le fichier XML, ne sont pas toujours succéssifs, par exemple j'ai un noeud ayant un id=3, et celui d'aprés a un id=8, donc c'est normal que la lecture n'est pas compléte, mais la question est : comment regler ce probléme ?


    Merci



    ...

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Pour le premier code vous pouvez simplifier :
    • Par une expression XPath faisant appel à la fonction count
    • En utilisant l'attribut length de votre objet DomNodeList :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      $fiches = $dom->getElementsByTagName('fiche');
      $total = $fiches->length;
      var_dump($total);


    Pour le deuxième code :
    Oui cette méthode de parcours n'est pas adaptée. On rencontrerait le même problème avec un tableau auquel on retire des éléments ou avec une table avec un champ auto-incrémenté. Si le but est de parcourir un ensemble autant le faire directement, et conventionnellement, par une expression XPath (je n'ai plus votre structure en tête ...) ou la méthode DomDocument->getElementsByTagName suivant les cas (ça reviendrait plus ou moins à votre premier code).

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Par défaut
    mon problème c'est que je ne peux pas faire de DomDocument->getElementsByTagName à cause de la structure de mon xml!

    la voilà la structure :

    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
    <mysql>
      <database name="personnes">
        <table>
          <fiche type="...">
            <struct>
              <var name="id">1</var>
              <var name="nom">...</var>
              <var name="prenom">...</var>
              <var name="statut">...</var>
              <var name="pageWebPerso">www</var>
              <var name="pageWebGRMIAO">www</var>
              <var name="photo">NULL</var>
              <var name="distinctions">NULL</var>
              <var name="implicationprojet"/>
            </struct>
          </fiche>
    pour accéder aux valeurs de id c'est pas du tout évident :S



    ...

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Je ne vois pas en quoi ça pose problème : il suffit de s'appuyer sur un élément de plus haut niveau (fiche - qui irait bien avec votre code, a priori - ou struct). Ceci dit vous employez déjà une expression XPath, plus ou moins inadaptée et redondante, au niveau de la fonction getFicheById.

    Concrètement si vous souhaitez parcourir l'ensemble des éléments fiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach ($dom->getElementsByTagName('fiche') as $fiche) {
        $nom = getVarByName($fiche, 'nom');
     
        echo $nom;
    }
    Ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $xpath = new DomXPath($dom);
    foreach ($xpath->query('//fiche') as $fiche) {
        $nom = getVarByName($fiche, 'nom');
     
        echo $nom;
    }
    Devraient répondre à la question initiale, non ?

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Par défaut
    oui merci

    je ne sais pas pourquoi j'ai compliqué les choses, j'ai cherché a utiliser les valeurs de id dans le XML ce qui serai trés compliqué, mais avec ton code ca marche merci beaucoup


    ...

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

Discussions similaires

  1. [DOM] Chargement de données dans fichier XML ?
    Par titoc dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 01/06/2008, 12h31
  2. [DOM] agir sur le DOM au changement d'une chaîne dans un FORM
    Par boteha dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 30/11/2005, 14h39
  3. DOM - naviguer dans un XML en javascript
    Par hpfx dans le forum Général JavaScript
    Réponses: 36
    Dernier message: 08/11/2005, 22h43
  4. [PERL]Nombre d'un caractère présent dans une chaine
    Par LE NEINDRE dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2005, 13h58
  5. Nombre de sauts de ligne dans un String
    Par Johnbob dans le forum ASP
    Réponses: 7
    Dernier message: 03/03/2004, 15h33

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