Altova MapForce 2024 Enterprise Edition

Exemple : Filtrer et numéroter les nœuds

Accueil Préc Haut Suivant

Le mappage illustré dans cet exemple est disponible sous PositionInFilteredSequence.mfd dans le dossier <Documents>\Altova\MapForce2024\MapForceExamples\.

 

Ce mappage lit un fichier XML qui contient les coordonnées de plusieurs personnes, les filtre et les écrit dans un fichier XML cible. L'objectif du mappage est de filtrer depuis le fichier XML de source uniquement les personnes dont le nom de famille commence avec la lettre "M" ou une des lettres suivantes de l'alphabet. Ensuite, les contacts extraits doivent être numérotés. Le nombre va servir d'identifiant unique de chaque contact dans le fichier XML cible.

mf_map_PositionInFilteredSequence

PositionInFilteredSequence.mfd

Pour atteindre l’objectif ci-dessus, les types de composant suivants ont été ajoutés au mappage :

 

Un filtre (voir Filtres et conditions )

Une variable complexe (voir Ajouter des variables)

Les fonctions greater et position (voir Ajouter une fonction au mappage)

Une constante (Pour ajouter une constante, sélectionner la commande de menu Insérer | Constante).

 

La variable utilise le même schéma que le composant de source. Si vous cliquez de la touche droite sur la variable et sélectionnez Propriétés depuis le menu contextuel, notez que le nœud BranchOffices/Office/Contact est sélectionné comme nœud racine pour cette structure de variable.

 

Tout d'abord, les données du composant de source sont passées dans le filtre. Le filtre passe ensuite à la variable les enregistrements qui remplissent la condition de filtre. Concrètement, le filtre est configuré ou obtenir uniquement les nœuds Contact où le prénom est égal ou plus grand que "M". Pour ce faire, la fonction greater compare chaque item last avec la valeur de constante "M".

 

La variable a l'entrée compute-when connectée à l'item de racine du composant de source (BranchOffices). Lors du runtime, cela entraîne une réévaluation de la variable  à chaque fois qu'un nouvel item est lu depuis la séquence dans le composant de source. Dans ce mappage, néanmoins, la connexion ou la non-connexion de l'item compute-when ne fait aucune différence. La raison est que la variable est connectée à l'item de source Contact (indirectement par le filtre), et il calculera autant de fois qu'il y a d'instances de Contact qui se conforment à la condition de filtre.

 

Les fonctions position retournent, pour chaque itération de la variable, le nombre de séquences actuelles. Seuls huit contacts remplissent la condition de filtre ; c'est pourquoi, si vous consultez le mappage et regardez la sortie, il est recommandé de noter comment les ID 1 à 8 ont été écrites dans l'élément ID du composant de cible.

 

La variable a été nécessaire, à cause de l'exigence de numéroter tous les enregistrements. Si nous avions connecté le résultat de filtre directement au composant de cible, il n'y aurait pas moyen de numéroter chaque occurrence de Contact. L'objectif de la variable dans ce mappage est donc de stocker chaque instance de Contact temporairement dans le mappage, elle peut donc être numérotée avant d'être écrite dans la cible.

© 2018-2024 Altova GmbH