Jointure entre un dataset et un fichier xml

Soyez le premier à donner votre avis sur cette source.

Vue 14 362 fois - Téléchargée 794 fois

Description

Ce Code est Composé de 2 classes : clsXML et ClsGrammaire
je mets ici les Fonctions joinLibelle() et XmlToDs qui permettent de Faire une jointure entre 2 fichiers XML ou un dataset et un Fichier XML selon leur utilisation
chacune de ces fonction est placée dasn une classe differente dans mon code je les appel donc en creant un objet a partir de ma classe

dans le code suivant objXMl represente une instanciation de la classe clsXML

Source / Exemple :


'Tout d'abord la fonction XmlToDs() Stockant les Informations d'un Fichier XML dans un dataset
'et necessitant :
Imports System.Xml
Imports System.Data

 'Stockage des données d'un fichier xml dans un dataset
    Public Function XmltoDs(ByVal str_Path As String, ByRef ds As DataSet) As Boolean
        'Str_Path: Chemin Du Fichier XML
        'Ds : Dataset qui va contenir le resultat

        Dim xtr As New XmlTextReader(str_Path)
        Try
            ds.ReadXml(xtr)
            XmltoDs = True
        Catch ex As Exception
            MsgBox(ex.Message)
            XmltoDs = False
        Finally
            xtr.Close()
        End Try
    End Function

'Puis la Fonction joinLibelle()qui effectue la jointure entre le dataset et le fichier XML
'et necessitant :Imports System.Data
' et : dim objXMl as new clsXML

 'Function joignant le libellé des Bases au dataset passé en parametre
    Private Function JoinLibelle(ByRef Ds As DataSet, ByVal Str_Path As String, ByVal str_NomChamp As String, ByVal str_Champ1 As String, ByVal str_Champ2 As String, ByVal str_RecupNom As String) As Boolean
        '**************************************************************************************
        '*** Ds: Dataset de Base sur lequel on Va venir Ajouter la jointure                 ***
        '*** Str_Path : Chemin d'Acces du Fichier XMl que l'on va ajouter a la jointure     ***
        '*** Str_NomChamp : Nom que l'on veut donner a la nouvelle Colonne                  *** 
        '*** Str_NomChamp1 : Nom du Champ de jointure dans le Dataset                       ***
        '*** Str_NomChamp2 : Nom du Champ de Jointure dans le Fichier XML                   ***
        '*** Str_RecupNom : Nom du Champ Que l'on veut recuperer dans le fichier XML        ***
        '**************************************************************************************

        Dim Ds_Base As New DataSet
        Dim monRowG As DataRow
        Dim monRowB As DataRow
        Dim Dt_base As DataTable
        Dim dt_Gram As DataTable
        Dim i As Integer = 1
        Dim j As Integer = 1

        Try

            'recuperation sous forme de fichier de Dataset du Fichier XML contenant les informations joindre
            If objXMl.XmltoDs(Str_Path, Ds_Base) = False Then
                JoinLibelle = False
                MsgBox("joinLibelleBase : Probleme de chargement du Fichier XML")
                Exit Function
            End If

            dt_Gram = Ds.Tables(0)
            Dt_base = Ds_Base.Tables(0)

            dt_Gram.Columns.Add(str_NomChamp)

            For Each monRowG In dt_Gram.Rows
                For Each monRowB In Dt_base.Rows
                    If CInt(monRowG(Trim(str_Champ1))) = CInt(monRowB(Trim(str_Champ2))) Then 'Si les Identifiants Correspondent on Ajoute le Champ
                        monRowG(str_NomChamp) = monRowB(str_RecupNom)
                    End If
                    j += 1
                Next
                i += 1
            Next

        Catch ex As Exception

            MsgBox(ex.Message)
            JoinLibelle = False
            Exit Function

        End Try

        JoinLibelle = True

    End Function

'Exemple d'utilisation :

dim objXMl as New clsXML
dim objGrammaire as New clsGrammaire
dim Ds as New dataset
dim Str_Path as String="C:\MonProjet\Type.xml"
dim Str_Path2 as String="C:\MonProjet\Color.xml"

If objXMl.XmltoDs(Str_Path, Ds) = False Then
                MsgBox("Problème de chargement du Fichier XML")
                Exit sub
End If

If objGrammaire.joinLibelle(Ds,Str_Path2,"LibColor","Couleur","ID","StrColor")=False Then
                MsgBox("Problème de Jointure Dataset/XML")
                Exit sub
End If

'Ds va alors contenir les Champs TYPE+une colonne "LibColor" contenant les Valeurs de StrColor ou TYPE.Couleur=Color.ID

Conclusion :


Le fIChier XML.Zip Contient Les FIchiers XMl permettant de Tester la Source

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

crilun
Messages postés
114
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
17 octobre 2006
-
J'ai oublié de preciser que pour Faire la Jointure sur Les Chmaps a comparer doivent etre des Entiers.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.