Lecture xml vers dataset : prob avec sous noeuds [Résolu]

Messages postés
43
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
10 septembre 2009
- - Dernière réponse : littlekenny
Messages postés
43
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
10 septembre 2009
- 18 juin 2007 à 13:02
Bonjour,
Avant de vous exposer le problème et mon code, voici la base de données:

<?xml version= "1.0" encoding="ISO-8859-1" ?>

[file://File_server/k/REND29/81302%20GAMMA/mubea.XML# - ]<job>

     <ident>mubea</ident>

 [file://File_server/k/REND29/81302%20GAMMA/mubea.XML# -]<bar>

           <ident>12345</ident>

           <count>1</count>  

[file://File_server/k/REND29/81302%20GAMMA/mubea.XML# -]          <cut>

                 <ident>0031</ident>                                =>noeuds

                 <count>12</count>

                 <length>2025.8</length>
                 <v ident" Benennung " nr"1">01</v>     = >sous noeuds

                  <v ident ="Ausführung" nr= " 2 ">002</v>

                 <v ident ="" nr= " 3 ">709</v>             

                 <v ident ="" nr= " 4 ">0</v>

                 <v ident ="" nr= " 5 ">427883 002 070 FSS Flügel SS</v>

     </cut>

    </bar>
</job>

    Public BaseDonnees As DataSet
    Public VueDonnees As DataView
    Public VueLigneDonnees As DataRowView
    Public FichXML As String
    Private MaTableDeDonnees As DataTable
    Private MaVueDeDonnees As DataView
<hr />
Public Sub ChargerGrille()
        'traitement
        Try
            'on renseigne le chemin du fichier XML
            FichXML = Application.StartupPath & "\options.xml"

            'on renseigne un dataset avec ce fichier XML sans shéma car inutile ici
            BaseDonnees = New DataSet
            BaseDonnees.ReadXml(FichXML)
            'on trie
            VueDonnees = Trier(BaseDonnees, "cut", "ident", True)

            'on renseigne le datagrid
            With DataGrid
                .DataSource = VueDonnees.Table
            End With

        Catch exc As Exception
            MessageBox.Show("XML file not found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
 End Sub

<hr />
    Public Function Trier(ByVal DataSet As DataSet, ByVal Table As String, ByVal Propriete As String, ByVal TriAscendant As Boolean) As DataView
        Dim Tri As String

        ' Génère une vue triée d'un dataset sur une propriété d'une de ses tables
        MaTableDeDonnees = DataSet.Tables(Table)      'Mettre dans un Objet DataTable une table du DataSet
        MaVueDeDonnees = MaTableDeDonnees.DefaultView      'Créer la vue

        If TriAscendant = True Then
            Tri = Propriete & " ASC"
        Else
            Tri = Propriete & " DESC"
        End If

        MaVueDeDonnees.Sort = Tri
        Return MaVueDeDonnees
    End Function
<hr />
Ma base de données est composée de lignes "cut" avec un id "ident".
Quand je n'utilise que les paramètres type :
<count> 1 </count>
Ca fonctionne nickel et mon datagrid est rempli (avec une ligne, dans ce cas ci).
Par contre, si je rajoute les sous noeuds type:
<v ident ="nom pour info" nr="1">valeur du paramètre</v>
Le programme s'arrête dans ce cas, et il me dit qu'il n'arrive pas à lire les sous noeuds.
J'aimerais savoir comment peut-on lire ces sous noeuds, récupérer la valeur du paramètre et le nom "vident" tout en pouvant lire les autres infos comme les premiers paramètres type <count>1</count>

Je vous remercie d'avance pour votre aide ou vos suggestions.
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
43
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
10 septembre 2009
3
Merci
Merci pour tes réponses.

J'utilise aussi un XmlDocument pour lire et transférer les données dans une structure un peu plus utilisable avec un dataset. Mais bon, parcourir un fichier xml avec xmldocument ligne par ligne et copier en même temps les changements dans un nouveau fichier texte, c'est pas top...


 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de littlekenny
Messages postés
31
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
9 mai 2007
0
Merci
salut, je pense savoir pourquoi mais je ne suis pas sur!

voila ton code:

<cut>

     <ident>0031</ident>                               = >noeuds

      <count>12</count>

     <length>2025.8</length>

     <v ident ="Benennung" nr= " 1 ">01</v>     =>sous noeuds
     <v ident" Ausführung " nr"2">002</v>

     <v ident= "" nr=" 3 ">709</v>             

     <v ident ="" nr= " 4 ">0</v>

     <v ident ="" nr= " 5 ">427883 002 070 FSS Flügel SS</v>
</cut>

cela peut s'écrire aussi comme ceci normalement:
<cut  indent ="" count="" length="" .....>
        <v indent="" nr="" parametre="" />
</cut>

peut être y a t-il un conflit entre le le noeud count de <bar> et le paramètre count de <cut>
Commenter la réponse de koalafou13
Messages postés
43
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
10 septembre 2009
0
Merci
En fait, non, le datagrid considère que certains noeux ont des enfants par rapport aux autres, ce qui provoque une erreur.
Pour résoudre ce problème, je lis le fichier et le recrée en virant une partie des infos des sous noeuds, pour avoir des enfants ayant la même déclaration et là, ça passe.

En passant, pour recréer le fichier xml, je crée un fichier texte et écrit tout simplement les données comme un flux texte,n'y aurait-il pas une solution plus rapide? Je pense au xmlwriter mais je n'ai pas encore tout compris... C'est la bonne voie?

 
Commenter la réponse de littlekenny
Messages postés
31
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
9 mai 2007
0
Merci
moi je fais comme ceci:

 doc = New XmlDocument()
 doc.Load("c:\monFich.xml")

instructions

ajout
suppression
ect...

doc.Save("c:\monFich.xml")

et ca marche
Commenter la réponse de koalafou13
Messages postés
31
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
9 mai 2007
0
Merci
moi je fais comme ceci:

 doc = New XmlDocument()
 doc.Load("c:\monFich.xml")

instructions

ajout
suppression
ect...

doc.Save("c:\monFich.xml")

et ca marche
Commenter la réponse de koalafou13
Messages postés
31
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
9 mai 2007
0
Merci
ahh mais j'utilise le DOM dans ce cas ci et pas le ADO.net
Commenter la réponse de koalafou13
Messages postés
31
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
9 mai 2007
0
Merci
sinon avec ADO.net  j'utilise aussi maBd.WriteXml("base.xml") pour sauvegarder mon fichier,

tu peux aller voir ma source si tu veux : source

comme ça tu pourra voir comment j'utilise le xml !
et en même temps pourquoi pas me donner ton avis ;-)

à bientôt
Commenter la réponse de koalafou13
Messages postés
43
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
10 septembre 2009
0
Merci
La fonction writexml ne fonctionne pas si la structure des noeuds est différente. Je réécrit mon fichier et je sauvegarde les modifs avec writexml. Je garde tout de même ma solution, elle fonctionne bien.


 
Commenter la réponse de littlekenny