Nombre de lignes du fichier XML

Neo020585 Messages postés 178 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 6 juillet 2009 - 10 juin 2006 à 01:05
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 11 juin 2006 à 18:15
Bonjour tout le monde, je suis en train de développer un
petit projet perso, et je me heurte à quelques problèmes.


J'analyse un fichier xml (valide) de type :





<?xml version= "1.0"
encoding= "ISO-8859-1"?>
<ordinateur id =" 123 ">
      <moniteur>ASUS</moniteur>
      aze">
           
<carte_mere id = "ASUSTEK">
                 
<carte_reseau>Ethernet 10/100</carte_reseau>
                 
<lecteur_dvd>Oui</lecteur_dvd>
                 
<lecteur_disquette>Non</lecteur_disquette>
                 
<disque_dur>Maxtor 100 Go</disque_dur>
                 
<carte_video>ATI X700 128 Mbits</carte_video>
                 
AMD 1700 Mhz

           
</carte_mere>
     
      <clavier>APM type azerty</clavier>
      <souris>APM optique</souris>
</ordinateur>


 


J'aimerai récupérer le nombre de ligne qui ne possèdent pas
de fils, le total = 12 pour cet exemple (id en fait partie).






J'ai actuellement le code suivant, mais pour
des raisons que j'ignore, il ne fonctionne pas L







XmlDataDocument xmlDoc = new XmlDataDocument();
xmlDoc.DataSet.ReadXml("test.xml");





int nbTables xmlDoc.DataSet.Tables.Count; // fonctionne (ici 3)






int


rows
= 0;









for


(int x = 0; x < nbTables; x++)









{










rows + = xmlDoc.DataSet.Tables[0].Rows.Count;









}







Ici, la valeur de rows après la boucle est égale à 3 !!!








Si l’un de vous a une solution, merci de m'aider au plus
vite



Néo020585






La programmation, c'est l'art de découvrir

14 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 juin 2006 à 10:22
Salut,

Avec XPath :
//*[count(*)=0]

Tu peux utiliser cette requête pour récupérer la liste des noeuds n'ayant pas d'enfants, mais dans ton exemple il y en a 9, pas 12.

/*
coq
MVP Visual C#
*/
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 juin 2006 à 10:27
C'est rigolo, moi j'en compte 8

VC# forever
=13319
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 juin 2006 à 10:29
Ha non tiens, y'en a un que j'avais pas vu
J'vais encore aller dormir un 'tit coup j'crois!

VC# forever
=13319
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 juin 2006 à 10:41
lol

/*
coq
MVP Visual C#
*/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Neo020585 Messages postés 178 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 6 juillet 2009 4
10 juin 2006 à 12:18
Cod : Pour info, les 3 champs que tu ne compte pas sont les champs ID.
Lorsque l'on charge le xml dans un datagrid afin de voir le nombre de ligne, elles en font partie !

N'existe-t-il pas un moyen en C# de récupérer le nombre de ligne du dataset ???

Néo020585

La programmation, c'est l'art de découvrir
0
Neo020585 Messages postés 178 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 6 juillet 2009 4
10 juin 2006 à 12:19
en fa   it je me suis planté, c pas Cod mais COQ

Néo020585

La programmation, c'est l'art de découvrir
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 juin 2006 à 12:35
Ben je vois pas d'autres solutions que de faire l'addition du nombre de ligne de chaque tables :
int rowCount = 0;

foreach(
DataTable dt
in ds.Tables) rowCount += dt.Rows.Count;

où ds représente le DataSet.

VC# forever
=13319
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 juin 2006 à 12:37
D'ailleurs, je viens de constater que ton exemple plus haut est faux, et c'est pour que ça la valeur ne joue pas. Tu fais :
int rows 0;<?XML:NAMESPACE PREFIX U1 /?> <?XML:NAMESPACE PREFIX = O /?>

for (int x = 0; x < nbTables; x++)

{
   rows + = xmlDoc.DataSet.Tables[0].Rows.Count;
}

alors qu'il faut mettre :

int rows = 0;

for (int x = 0; x < nbTables; x++)

{
   rows += xmlDoc.DataSet.Tables[ x ].Rows.Count;
}

<hr size ="2" />VC# forever
/infomsg/auteurdetail.aspx?ID=13319
0
Neo020585 Messages postés 178 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 6 juillet 2009 4
10 juin 2006 à 13:55
Bidou : Je viens d'essayer ta méthode du foreach, mais elle ne fonctionne pas meiux, elle me renvoi toujours 3.
De plus, je me suis trompé quand j'ai recopier mon bout de code, et c bien un x que j'ai mis pour le Rows.Count.
Mon résultat de change toujours pas, j'obtient 3 pour ce fichier.

Néo020585

La programmation, c'est l'art de découvrir
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 juin 2006 à 23:23
Je ne comprend pas pourquoi tu parles de fichier, on parle bien d'un DataSet non?
Tu charges le DataSet (avec méthode LoadXml) ou bien quoi?

Si oui, soit certain que le contenu du DataSet est correct (tout n'est peut-être pas chargé comme tu le penses). Car les deux méthodes ci-dessus fonctionnent... Et si ça retourne 3, c'est que ya 3 rows dans ton DataSet (un par table?) !

VC# forever
=13319
0
Neo020585 Messages postés 178 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 6 juillet 2009 4
10 juin 2006 à 23:29
Je charge effectivement un dataset avec le conteu d'un fichier xml avec la méthode xmlDoc.DataSet.ReadXml("test.xml");.
Pour vérifier le nombre de ligne qu'il y a par table, j'ai afficher le dataset dans un datagrid.
Le resultat est tel que je trouve 12 lignes au total.

Est-ce que tu pense que 3 serait le nombre de ligne correspondant au noeud ayant des enfants ?

Si oui, vois-tu une solution à mon problème ?

Néo020585

La programmation, c'est l'art de découvrir
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 juin 2006 à 13:01
Non, mais dans le doute j'ai quand même fait un petit exemple :

// Une ligne
DataTable dt1 =
new
DataTable();
dt1.Columns.Add(
"1",
typeof(
string));
dt1.Rows.Add(
"1");

// deux lignes
DataTable dt2 =
new
DataTable();
dt2.Columns.Add(
"1",
typeof(
string));
dt2.Rows.Add(
"1");
dt2.Rows.Add(
"2");

// trois lignes
DataTable dt3 =
new
DataTable();
dt3.Columns.Add(
"1",
typeof(
string));
dt3.Rows.Add(
"1");
dt3.Rows.Add(
"2");
dt3.Rows.Add(
"3");

DataSet ds =
new
DataSet();
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
ds.Tables.Add(dt3);

int rows = 0;

foreach (
DataTable dt
in ds.Tables) rows += dt.Rows.Count;

// Rows vaut 6 (3+2+1)
Console.WriteLine(
"rows: " + rows);
Ca print bien 6, donc de ce côté là y'a aucun problème.
T'as une erreur qui vient de quelques part d'autre...
Je ne sais pas pourquoi, j'ai l'impression que le dataSet ne contient pas les données que tu penses !

Par exemple, comment tu fais pour afficher un DataSet dans un DataGridView??? On ne peut afficher qu'une table à la fois...

VC# forever
=13319
0
Neo020585 Messages postés 178 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 6 juillet 2009 4
11 juin 2006 à 15:54
En fait, lorsque je charge le DataSet dans le DataGrid, il me présente tout d'abord les 3 tables, et lorsque l'on clique sur l'une d'entre elle, on peut naviguer dedans.

Néo020585

La programmation, c'est l'art de découvrir
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 juin 2006 à 18:15
Mais tu utilises un DataGrid ou un DataGridView?
Ca serait pas mal si tu pouvais mettre un peu de code, du genre la méthode qui s'occupe de charger les données du fichier xml dans le DataGrid(View), le fichier xml (le plus de ligne possible) ou tout autre bout de code qui pourrait aider.
Parce que là, c'est dur de dire comme ça...

VC# forever
=13319
0
Rejoignez-nous