Xml et dataset

edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 - Modifié par edwinzap le 4/06/2014 à 15:09
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 - 4 juin 2014 à 15:54
Bonjour,
Je viens de commencer avec les fichiers Xml.
Mon programme crée des fichiers xml pour des chants. Voici la forme de mes fichiers XML:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Chant>
     <Titre>A</Titre>
     <AuteurMusique>wcwc</AuteurMusique>
     <AuteurParoles>qqsdqsd</AuteurParoles>
     <NCode>xcvbcvb</NCode>
     <Remarques>azeaz</Remarques>
     <Paroles>
          <R>R</R>
          <C1>R</C1>
          <C2>R</C2>
          <C3>F</C3>
     </Paroles>
     <OrdreSections>R C1 R C2 R C3 R</OrdreSections>
</Chant>


Jusqu'à présent, j'allais chercher à chaque fois l'élément que j'avais besoin et remplissais la textbox correspondante.

Je voudrais utiliser un dataset composer de 2 tables liées (une pour les infos et une pour les paroles)
A l'ouverture du programme, je voudrais que le dataset se remplisse avec tous les fichiers xml se trouvant dans un dossier spécifiés. Comment faire?
J'ai essayé avec un morceau de code en allant chercher un seul fichier:

        Dim fichier As String
        If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
                fichier = OpenFileDialog1.FileName
                ds.ReadXml(fichier)
                DataGridView1.DataSource = ds
                DataGridView1.DataMember = ds.Tables(0).TableName
        End If


Ce code fonctionne, mais pour un seul fichier, et il ne me sort pas les informations des noeuds "Paroles". De plus, il crée sa propre table avec son propre schéma (ce que je ne souhaite pas)

Comment faire pour remplir mes deux tables avec tous les fichiers se trouvant dans un dossier spécifié??? (pour ensuite faire une liaisons entre les deux tables)

Merci

4 réponses

edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
4 juin 2014 à 15:11
J'ai testé en ouvrant plusieurs fichiers l'un après l'autre, et il ajoute une datarow par fichier. Donc de ce côté, ça fonctionne.
Par contre il ne lis tjrs pas le noeud "Paroles" et je ne sais tjrs pas choisir dans quelle table il stocke les données !
0
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
4 juin 2014 à 15:21
Ok, j'ai compris, il stocke le noeud "Parole" dans une nouvelle table!
0
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
Modifié par edwinzap le 4/06/2014 à 15:40
J'ai juste une question dont je n'ai pas encore de solution.
Comment lié les deux tables???
Je devrait avoir pour cela un champ "ref" supplémentaire que je puisse ajouter
0
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
Modifié par edwinzap le 4/06/2014 à 15:55
Voici mon code si ça intéresse qqn.
Je ne suis pas sur que ça soit le meilleur mais bon, ça fonctionne correctement:
            Dim dossier As String
            If FolderBrowserDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
                dossier = FolderBrowserDialog1.SelectedPath
                Dim répertoire() As String = Directory.GetFiles(dossier, ".", SearchOption.AllDirectories)
                Dim N As Integer = 0
                Dim RowCount As Integer = 0

                For Each chant As String In répertoire
                    ds.ReadXml(chant)
                    DataGridView1.DataSource = ds
                    DataGridView1.DataMember = ds.Tables(0).TableName
                    DataGridView2.DataSource = ds
                    DataGridView2.DataMember = ds.Tables(1).TableName
                    If ds.Tables(0).Columns.Contains("Ref") = False Then
                        ds.Tables(0).Columns.Add("Ref")
                    End If
                    ds.Tables(0).Rows(ds.Tables(0).Rows.Count - 1)("Ref") = N

                    If ds.Tables(1).Columns.Contains("Ref") = False Then
                        ds.Tables(1).Columns.Add("Ref")
                    End If
                    For I = RowCount To ds.Tables(1).Rows.Count - 1
                        ds.Tables(1).Rows(I)("Ref") = N
                    Next
                    RowCount = ds.Tables(1).Rows.Count
                    N = N + 1
                Next
            End If
0
Rejoignez-nous