Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/11/2007, 21h00   #1
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
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 :
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 :
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



...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 01h07   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
    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).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 19h14   #3
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
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 :
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



...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 21h06   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
1
2
3
4
5
foreach ($dom->getElementsByTagName('fiche') as $fiche) {
    $nom = getVarByName($fiche, 'nom');
 
    echo $nom;
}
Ou encore :
Code :
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 ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 21h15   #5
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
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


...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h55.


 
 
 
 
Partenaires

Hébergement Web