Lecture xml vers dataset : prob avec sous noeuds

Résolu
littlekenny Messages postés 43 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 10 septembre 2009 - 22 avril 2007 à 10:45
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.

8 réponses

littlekenny Messages postés 43 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 10 septembre 2009
26 avril 2007 à 22:35
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...


 
3
koalafou13 Messages postés 31 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 9 mai 2007
24 avril 2007 à 17:38
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>
0
littlekenny Messages postés 43 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 10 septembre 2009
25 avril 2007 à 20:26
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?

 
0
koalafou13 Messages postés 31 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 9 mai 2007
25 avril 2007 à 20:49
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
0

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

Posez votre question
koalafou13 Messages postés 31 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 9 mai 2007
25 avril 2007 à 20:49
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
0
koalafou13 Messages postés 31 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 9 mai 2007
25 avril 2007 à 20:50
ahh mais j'utilise le DOM dans ce cas ci et pas le ADO.net
0
koalafou13 Messages postés 31 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 9 mai 2007
29 avril 2007 à 08:04
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
0
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
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.


 
0
Rejoignez-nous