Exemple : Mapper les noms d'éléments aux valeurs d'attribut
Cet exemple vous montre comment mapper les noms d’éléments d’un document XML aux valeurs d’attributs d’un document XML cible. L'exemple est accompagné d'un exemple de mappage disponible à l'emplacement suivant : <Documents>\Altova\MapForce2027\MapForceExamples\DocExamples\ConvertProducts.mfd.
Pour comprendre le fonctionnement de cet exemple, supposons que vous disposiez d’un fichier XML contenant une liste de produits. Chaque produit présente le format suivant :
<product> <id>1</id> <color>red</color> <size>10</size> </product> |
Votre objectif est de convertir les informations relatives à chaque produit en paires nom-valeur, par exemple :
<product> |
Pour effectuer un mappage de données tel que celui ci-dessus avec un minimum d'effort, cet exemple utilise une fonctionnalité de MapForce appelée « accès dynamique aux noms de nœuds ». « Dynamique » signifie que, lors de l'exécution du mappage, celui-ci peut lire les noms des nœuds (et pas seulement leurs valeurs) et utiliser ces noms comme valeurs. Vous pouvez créer le mappage requis en quelques étapes simples, comme indiqué ci-dessous.
Étape 1 : Ajouter le composant XML source au mappage
•Dans le menu Insérer, cliquez sur Fichier/schéma XML, et chercher le fichier suivant : <Documents>\Altova\MapForce2027\MapForceExamples\DocExamples\Products.xml. Ce fichier XML pointe vers le schéma Products.xsd situé dans le même dossier.
Étape 2 : Ajouter le composant XML cible au mappage
•Dans le menu Insérer, cliquez sur Fichier/schéma XML, puis recherchez le fichier de schéma suivant : <Documents>\Altova\MapForce2027\MapForceExamples\DocExamples\ProductValuePairs.xsd. Lorsque vous êtes invité à fournir un fichier d’instance, cliquez sur Ignorer. Lorsque vous êtes invité à sélectionner un élément racine, sélectionnez products comme élément racine.
À ce stade, le mappage devrait se présenter comme suit :

Étape 3 : Activer l'accès dynamique aux nœuds enfants
1.Cliquez avec le bouton droit sur le nœud product du composant source, puis sélectionnez Afficher éléments enfant générique avec nom dynamique dans le menu contextuel.
2.Dans le dialogue qui s'ouvre, sélectionnez text() comme type. Laissez les autres options telles quelles.

Notez qu'un nœud text() a été ajouté au composant source. Ce nœud fournira le contenu de chaque élément enfant au mappage (dans ce cas, les valeurs de « id », « color » et « size »).

Étape 4 : Tracer les liaisons de mappage
Enfin, tracez les liaisons de mappage A, B, C et D comme illustré ci-dessous. Si vous le souhaitez, double-cliquez sur chaque liaison, en commençant par celle du haut, puis saisissez respectivement « A », « B », « C » et « D » dans la zone Description.

ConvertProducts.mfd
Dans le mappage illustré ci-dessus, la connexion A crée, pour chaque produit de la source, un produit dans la cible. Jusqu’à présent, il s’agit d’une connexion MapForce standard qui ne fait aucune référence aux noms des nœuds. La connexion B, en revanche, crée, pour chaque élément enfant de type product rencontré, un nouvel élément dans la cible appelé attribute.
La connexion B est une connexion cruciale dans le mappage. Pour rappeler l’objectif de cette connexion, elle transfère une séquence d’éléments enfants de product de la source vers la cible. Elle ne transfère ni les noms ni les valeurs réels. Par conséquent, elle doit être comprise comme suit : si l’element () source possède N éléments enfants, créer N instances de cet élément dans la cible. Dans ce cas particulier, product dans la source possède trois éléments enfants (id, color et size). Cela signifie que chaque product dans la cible comportera trois éléments enfants portant l’attribut name.
Bien que cela ne soit pas illustré dans cet exemple, la même règle s’applique au mappage des éléments enfants de l’élément attribute() : si l’élément source attribute() comporte N attributs enfants, créez N instances de cet élément dans la cible. |
Ensuite, la connexion C copie le nom réel de chaque élément enfant de product vers la cible (littéralement, « id », « color » et « size »).
Enfin, la connexion D copie la valeur de chaque élément enfant de product, sous forme de chaîne de caractères, vers la cible.
Pour prévisualiser le résultat du mappage, cliquez sur le volet Sortie et observez le code XML généré. Comme prévu, le résultat contient plusieurs produits dont les données sont stockées sous forme de paires nom-valeur, ce qui était l’objectif visé par ce mappage.
<?xml version="1.0" encoding="UTF-8"?> |
Sortie du mappage générée