Altova MapForce 2024 Enterprise Edition

Exemple : Mapper les noms d'élément dans les valeurs d'attribut

Accueil Préc Haut Suivant

Cet exemple vous montre comment mapper des noms d'élément depuis un document XML pour attribuer des valeurs dans un document XML cible. L'exemple s'accompagne d'un mappage d'échantillon, qui est disponible dans le chemin suivant : <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\ConvertProducts.mfd.

 

Afin de comprendre ce que fait l'exemple, partons du principe que vous avez un fichier XML qui contient une liste de produits. Chaque produit comporte le format suivant :

 

  <product>

    <id>1</id>

    <color>red</color>

    <size>10</size>

  </product>

 

Votre objectif est de convertir l'information concernant chaque produit en des paires nom-valeur, par exemple :

 

  <product>
    <attribute name="id" value="1" />
    <attribute name="color" value="red" />
    <attribute name="size" value="10" />
</product>

 

Pour effectuer un mappage de données comme celui présenté ci-dessus avec un effort minimum, cet exemple utilise une fonction MapForce appelée "Accès dynamique aux noms de nœud". "Dynamique" signifie ici que, lorsque le mappage est exécuté, il peut lire les noms de nœud (pas uniquement les valeurs) et utilise ces noms en tant que valeurs. Vous pouvez créer le mappage requis en quelques étapes, voir ci-dessous.

 

Étape 1: Ajouter le composant XML source au mappage

Dans le menu Insérer, cliquer sur Schéma XML/Fichier, et chercher le fichier suivant : <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\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, cliquer sur Schéma XML/Fichier, et chercher le fichier suivant : <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\ProductValuePairs.xsd. Lorsque vous êtes invité à fournir un fichier d'instance, cliquer sur Sauter. Lorsque vous êtes invité à choisir un élément racine, choisir products en tant qu'élément racine.

 

Á ce niveau, le mappage devrait ressembler à l'exemple suivant :

mf_map_ConvertProducts_01

 

Étape 3: Activer l'accès dynamique aux nœuds enfants

1.Cliquer avec la touche de droite sur le nœud product dans le composant de source, et choisir Afficher les éléments enfants avec un Nom Dynamique depuis le menu contextuel.

2.Dans le dialogue qui s'ouvre, choisir text() en tant que type. Ne pas toucher aux autres options.

mf_map_ConvertProducts_02

 

Veuillez noter qu'un nœud text() a été ajouté au composant de source. Ce nœud fournira le contenu de chaque item enfant au mappage (dans ce cas, la valeur de "id", "color", et "size").

mf_map_ConvertProducts_03

 

Étape 4: Tracer les connexions de mappage

Enfin, tracer les connexions de mappage A, B, C, D comme illustré ci-dessous. En option, double-cliquer sur chaque connexion, en commençant par la connexion supérieure et en saisissant le texte "A", "B", "C", et "D", respectivement, dans le champ Description.

mf_map_ConvertProducts_04

ConvertProducts.mfd

Dans le mappage illustré ci-dessus, la connexion A crée, pour chaque produit dans la source, un produit dans la cible. Jusqu'à présent, il s'agit d'une connexion MapForce standard qui n'adresse les noms de nœud d'aucune manière. La connexion B, néanmoins, crée pour chaque élément enfant de product rencontré, un nouvel élément dans la cible, appelé attribute.

 

La connexion B est une connexion cruciale dans le mappage. Nous rappelons ici l'objectif de cette connexion : elle porte une séquence des éléments enfants de product depuis la source vers la cible. Elle ne porte pas les noms ou les valeurs. Ainsi : si l'element() source a N éléments enfant, créer N instances de cet item dans la cible. Dans ce cas particulier, product dans la source a trois éléments enfant (id, color et size). Cela signifie que chaque product dans la cible aura trois éléments enfants portant le nom attribute.

 

Bien que non illustré dans cet exemple, la même règle est utilisée pour mapper les éléments enfant de attribute(): si l'item de source attribute() a N attributs enfants, créer N instances de cet item dans la cible.

 

Ensuite, la connexion C copie le nom 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 du produit, en tant que type de string, dans la cible.

 

Pour consulter la sortie de mappage, cliquer sur l'onglet Sortie et observer le XML généré. Comme prévu, la sortie contient plusieurs produits dont les données sont stockées en tant que paires nom-valeur, ce qui était l'objectif de ce mappage.

 

<?xml version="1.0" encoding="UTF-8"?>
<products xsi:noNamespaceSchemaLocation="ProductValuePairs.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <product>
    <attribute name="id" value="1"/>
    <attribute name="color" value="red"/>
    <attribute name="size" value="10"/>
  </product>
  <product>
    <attribute name="id" value="2"/>
    <attribute name="color" value="blue"/>
    <attribute name="size" value="20"/>
  </product>
  <product>
    <attribute name="id" value="3"/>
    <attribute name="color" value="green"/>
    <attribute name="size" value="30"/>
  </product>
</products>

Sortie de mappage générée

© 2018-2024 Altova GmbH