III. Petits plus XML Task : Merge et comparaison de deux fichiers XML▲
Dans cette partie, nous allons effectuer deux opérations. La première consiste à merger, regrouper deux XML en un seul fichier XML. Ceci peut-être utile en amont d'un import quelconque. De même, nous allons voir comment comparer deux fichiers XML afin d'en dégager les différences.
Le tronc commun à ces deux opérations est la création du 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étré notre composant XML Task.
III-A. Merge de deux fichiers XML▲
Nous disposons de deux 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 3e 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éfaut, 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 : ledit fichier ssis-xml.xml
- Le type du second opérande : une connexion de fichier, nous disposons 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ésultats 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 deux fichiers XML▲
La comparaison de deux 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.