III. Petits plus XML Task : Merge et comparaison de 2 fichiers XML▲
Dans cette partie, nous allons effectuer 2 opérations. La première consiste à merger, regrouper 2 XML en un seul fichier XML. Ceci peut-être utile en amont d'un import quelconque. De même, nous allons voir comment comparer 2 fichiers XML afin d'en dégager les différences.
Le tronc commun à ces deux opérations est la création de l'XML task. Pour cela, au niveau de l'onglet Control Flow ou flux de contrôle, nous allons ajouter une tâche XML comme suit :
Remarque : L'erreur symbolisée par la petite croix rouge est normale. Nous n'avons pas encore paramétrer notre composant XML Task.
III-A. Merge de 2 fichiers XML▲
Nous disposons de 2 fichiers XML que nous souhaitons regrouper en un seul. Nous allons dupliquer notre exemple XML et nous allons paramétrer notre tâche de telle sorte que le regroupement se fasse dans un 3ème fichier résult.xml. Bien entendu, il est possible de faire ce regroupement dans l'un des deux fichiers sources au risque de perdre l'original.
Par défault, notre XML Task ressemble à ceci :
C'est cet écran que nous allons paramétrer. Il nous faut définir :
- Le type d'opération : Merge
- Notre type du premier opérande : une connexion de fichier
- Notre premier opérande : le dit fichier ssis-xml.xml
- Le type du second opérande : une connexion de fichier, nous diposons d'un fichier XML
- Le second opérande : notre fichier XML ssis-xml2
- Notre type de destination : une connexion de fichier, nous allons écrire les résultas dans notre fichier result.xml
- Le type de destination : une connexion de fichier
Nous obtenons alors ceci :
Que nous validons. Puis nous exécutons notre opération de merge comme suit :
Notre opération a réussi :
Voyons ce que donne le résultat de notre fichier xml result.xml :
<produits>
<produit>
<libelle>
Brosse a dents</libelle>
<nb>
1</nb>
<prix>
2</prix>
</produit>
<produit>
<libelle>
lessive</libelle>
<nb>
2</nb>
<prix>
16</prix>
</produit>
<produit>
<libelle>
Mouchoirs</libelle>
<nb>
10</nb>
<prix>
3</prix>
</produit>
<produit>
<libelle>
bonbons</libelle>
<nb>
2</nb>
<prix>
5.99</prix>
</produit>
<produit>
<libelle>
fruits</libelle>
<nb>
5</nb>
<prix>
1</prix>
</produit>
<produit>
<libelle>
Brosse a dents</libelle>
<nb>
1</nb>
<prix>
2</prix>
</produit>
<produit>
<libelle>
lessive</libelle>
<nb>
2</nb>
<prix>
16</prix>
</produit>
<produit>
<libelle>
Mouchoirs</libelle>
<nb>
10</nb>
<prix>
3</prix>
</produit>
<produit>
<libelle>
bonbons</libelle>
<nb>
2</nb>
<prix>
5.99</prix>
</produit>
<produit>
<libelle>
fruits</libelle>
<nb>
5</nb>
<prix>
1</prix>
</produit>
</produits>
III-B. Comparaison de 2 fichiers XML▲
La comparaison de 2 fichiers XML correspond à l'opération Diff dans une tâche XML. Notre second fichier XML permettant la comparaison sera l'initial de notre exemple légèrement modifié comme suit :
<produits>
<produit>
<libelle>
Brosse a dents</libelle>
<nb>
1</nb>
<prix>
4</prix>
</produit>
<produit>
<libelle>
lessive</libelle>
<nb>
4</nb>
<prix>
16</prix>
</produit>
<produit>
<libelle>
Mouchoir</libelle>
<nb>
10</nb>
<prix>
3</prix>
</produit>
<produit>
<libelle>
Chocolat</libelle>
<nb>
4</nb>
<prix>
5.99</prix>
</produit>
<produit>
<libelle>
fruits</libelle>
<nb>
5</nb>
<prix>
1</prix>
</produit>
</produits>
Pour paramétrer cette comparaison de fichier, il nous faut définir :
- Le type d'opération : Diff
- Note type de premier opérande : connexion de fichier
- Notre premier opérande : ssis-xml.xml
- Note type de second opérande : connexion de fichier
- Notre second opérande : ssis-xml2.xml
- SaveDiffDiagram : true
- DiffDIagramType : connexion de fichier
- DiffDiagramDestination : result.xml
Nous obtenons alors via ce paramétrage ceci :
Nous validons et exécutons cette nouvelle tâche comme expliqué précédemment. Nous obtenons alors ceci dans notre fichier result.xml :
<?xml version="1.0" encoding="utf-16"?>
<
xd
:
xmldiff
version
=
"1.0"
srcDocHash
=
"5237581266046920043"
options
=
"None"
fragments
=
"no"
xmlns
:
xd
=
"http://schemas.microsoft.com/xmltools/2002/xmldiff"
>
<
xd
:
node
match
=
"1"
>
<
xd
:
node
match
=
"1"
>
<
xd
:
node
match
=
"3"
>
<
xd
:
change
match
=
"1"
>
4</
xd
:
change>
</
xd
:
node>
</
xd
:
node>
<
xd
:
node
match
=
"2"
>
<
xd
:
node
match
=
"2"
>
<
xd
:
change
match
=
"1"
>
4</
xd
:
change>
</
xd
:
node>
</
xd
:
node>
<
xd
:
node
match
=
"3"
>
<
xd
:
node
match
=
"1"
>
<
xd
:
change
match
=
"1"
>
Mouchoir</
xd
:
change>
</
xd
:
node>
</
xd
:
node>
<
xd
:
node
match
=
"4"
>
<
xd
:
node
match
=
"1"
>
<
xd
:
change
match
=
"1"
>
Chocolat</
xd
:
change>
</
xd
:
node>
<
xd
:
node
match
=
"2"
>
<
xd
:
change
match
=
"1"
>
4</
xd
:
change>
</
xd
:
node>
</
xd
:
node>
</
xd
:
node>
</
xd
:
xmldiff>
Et si vous comparez minutieusement, c'est exactement les différences qui ressortent de cette opération.