Altova MapForce 2024 Enterprise Edition

Exemple : Regrouper et filtrer les nœuds par nom

Accueil Préc Haut Suivant

Cet exemple vous montre comment concevoir un mappage qui lit des paires clé-valeur depuis une liste de propriété XML (ou plist XML) et les écrit dans un fichier CSV. (Les listes de propriété XML représentent un moyen de stocker des informations d'objet macOS et iOS dans un format XML, voir https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/UnderstandXMLPlist/UnderstandXMLPlist.html.) L'exemple est accompagné d'un échantillon de mappage qui est disponible sous le chemin suivant : <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\ReadPropertyList.mfd.

 

Le listage de code ci-dessous représente le fichier XML de source.

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>First Name</key>
    <string>William</string>
    <key>Last Name</key>
    <string>Shakespeare</string>
    <key>Birthdate</key>
    <integer>1564</integer>
    <key>Profession</key>
    <string>Playwright</string>
    <key>Lines</key>      
    <array>
        <string>It is a tale told by an idiot,</string>
        <string>Full of sound and fury, signifying nothing.</string>
    </array>
  </dict>
</plist>

 

L'objectif du mappage est de créer une nouvelle ligne dans le fichier CSV depuis certaines paires clé-valeur trouvée sous le nœud <dict> dans le fichier de liste de propriété. En particulier, le mappage doit uniquement filtrer des paires <key> - <string>. Les autres paires clé-valeurs (par exemple, <key> - <integer>) doivent être ignorées. Dans le fichier CSV, la ligne doit stocker le nom de la propriété, séparée de la valeur de la propriété par une virgule. Autrement dit, la sortie doit ressembler à l'exemple suivant :

 

Prénom,William

Nom de famille,Shakespeare

Profession,Playwright

 

Pour atteindre cet objectif, le mappage utilise un accès dynamique à tous les nœuds enfants du nœud dict. Ensuite, le mappage utilise la fonction group-starting-with pour regrouper les paires clé-valeur extraites du fichier XML. Enfin, le mappage utilise un filtre pour ne filtrer que les nœuds dont le nom de nœud est "string".

 

Les étapes suivantes montrent comment le mappage requis peut être créé.

 

Étape 1 : Ajouter le composant XML source au mappage

1.Le langage de transformation de mappage est configuré sur BUILT-IN.

2.Dans le menu Insérer, cliquez sur Schéma XML/Fichier, et chercher le fichier suivant : <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\plist.xml. Ce fichier XML pointe vers le schéma plist.xml situé dans le même dossier.

 

Étape 2 : Ajouter le composant CSV cible au mappage

1.Dans le menu Insérer, cliquez sur Fichier texte. Sur invitation, choisir l'option Utiliser un traitement simple pour les fichiers CSV standard... ..

2.Ajouter un champ CSV dans le composant, en cliquant sur Ajouter champ.

3.Double-cliquez sur le nom de chaque champ et saisir "Key" en tant que nom du premier champ, et "Value" en tant que nom du second champ. Le champ "Key" stockera le nom de la propriété alors que le champ "Value" stockera la valeur de la propriété. Pour plus d'informations concernant les composants CSV, voir Fichiers CSV et texte.

mf_map_ReadPropertyList_01

 

Étape 3 : Ajouter le filtre et les fonctions

1.Glisser les fonctions equal, exists et group-starting-with depuis la fenêtre de bibliothèque dans le mappage. Pour des informations générales concernant les fonctions, voir Fonctions.

2.Pour ajouter le filtre, cliquez dans le menu Insérer, puis cliquez sur Filtre : Nœuds/Lignes. Pour des informations générales concernant les filtres, voir Filtres et conditions.

3.Dans le menu Insérer, cliquez sur Constante, puis saisissez le texte "chaîne".

4.Cliquez avec la touche de droite sur le nœud dict dans le composant de source et choisissez Afficher les éléments enfants avec un Nom Dynamique depuis le menu contextuel. Dans le dialogue "Paramètres des Enfants nommés dynamiquement", veuillez vous assurer que la case à cocher Afficher les nœuds de test pour filtrer ou créer les élément par nom de nœud fixé est bien sélectionnée.

mf_map_ReadPropertyList_02

5.Tracer les connexions comme affiché ci-dessous.

mf_map_ReadPropertyList

ReadPropertyList.mfd

 

Explication du mappage

L’élément element() dans le composant source fournit à tous les enfants du le nœud dict, comme séquence à la fonction group-starting-with. La fonction group-starting-with crée un nouveau groupe à chaque fois qu'un nœud portant le nom key est rencontré. La fonction exists vérifie cette condition et retourne le résultat en tant que valeur booléenne vrai/faux de la fonction de regroupement.

 

Pour chaque groupe, le filtre vérifie si le nom du nœud actuel est égal à "string", avec l'aide de la fonction equal. Le nom lui-même est lu depuis le local-name(), qui fournit le nom du nœud en tant que string.

 

Les connexions vers le composant cible ont le rôle suivant :

 

Une nouvelle ligne est créée dans le CSV cible uniquement si la condition de filtre est vraie.

Key (nom de propriété) est prélevé depuis la valeur de l'élément key dans la source.

Value (valeur de de propriété) est prélevé depuis le nœud de test de nom string name.

© 2018-2024 Altova GmbH