Altova MapForce 2025 Professional Edition

Cette rubrique explique comment rechercher des données dans le fichier XML source avec l’aide d’une FDU récursive. Pour tester la FDU récursive, vous aurez besoin du mappage suivant : MapForceExamples\RecursiveDirectoryFilter.mfd. Dans le mappage ci-dessous, la FDU FilterDirectory reçoit des données depuis le fichier source Directory.xml et le composant d’entrée simple SearchFor qui fournit l’extension .xml. Une fois que les données ont été traitées par la FDU, elles sont mappées vers le fichier cible.

 

Le mappage principal (voir la capture d'écran ci-dessous) décrit la mise en page du mappage général. La manière dont la FDU traite les données est définie séparément dans le mappage de fonction (voir l’implémentation FDU ci-dessous).

mf_udf_23

Objectifs

Notre objectif est de recenser des fichiers avec une extension .xml dans la sortie tout en préservant toute la structure du répertoire. Les sous-sections ci-dessous expliquent le processus de mappage en détail.

 

Fichier source

Ci-dessous, vous trouverez un extrait du fichier XML source (Directory.xml) qui contient des informations de fichiers et répertoires. Notez que les fichiers dans la liste ont différentes extensions (par ex., .xml, .dtd, .sps). Conformément au schéma (Directory.xsd), l’élément directory peut avoir des enfants fichier et des enfants répertoire. Tous les éléments directory sont récursifs.

 

<directory name="ExampleSite">

 <file name="blocks.sps" size="7473"/>

 <file name="blocks.xml" size="670"/>

 <file name="block_file.xml" size="992"/>

 <file name="block_schema.xml" size="1170"/>

 <file name="contact.xml" size="453"/>

 <file name="dictionaries.xml" size="206"/>

 <file name="examplesite.dtd" size="230"/>

 <file name="examplesite.spp" size="1270"/>

 <file name="examplesite.sps" size="20968"/>

 ...

 <directory name="output">

         <file name="examplesite1.css" size="3174"/>

         <directory name="images">

                 <file name="blank.gif" size="88"/>

                 <file name="block_file.gif" size="13179"/>

                 <file name="block_schema.gif" size="9211"/>

                 <file name="nav_file.gif" size="60868"/>

                 <file name="nav_schema.gif" size="6002"/>

         </directory>

 </directory>

</directory>

 

Implémentation FDU

Pour voir l’implémentation interne de la FDU, double-cliquez sur son en-tête dans le mappage principal. La FDU est récursive, c'est-à-dire qu'elle contient un appel vers elle-même. Étant donné qu'elle est connectée à l'élément récursif directory, cette fonction sera appelée autant de fois qu'il existe des éléments directory imbriqués dans l'instance XML de source. Pour prendre en charge des appels récursifs, la fonction doit être regular.

mf_udf_24

L’implémentation de la FDU est constituée de deux parties : (i) définir les fichiers et (ii) définir le répertoire à rechercher.

 

Définir des fichiers

La FDU traite les fichiers comme suit : La fonction contains vérifie si le premier string (le nom de fichier) contient le sous-string .xml (fourni par le composant d’entrée simple SearchFor). Si la fonction retourne true, le nom de fichier avec une extension .xml est écrite dans la sortie.

 

Traiter des répertoires enfant

Les répertoires enfant du répertoire actuel sont envoyés comme entrée dans la FDU actuelle. La FDU itère donc à travers tous les éléments du directory et vérifie si les fichiers avec l’extension .xml existent.

 

Sortie

Lorsque vous cliquez sur le volet Sortie, MapForce affichera uniquement des fichiers avec l’extension .xml (voir l’extrait ci-dessous).

 

<directory name="ExampleSite">

 <file name="blocks.xml" size="670"/>

 <file name="block_file.xml" size="992"/>

 <file name="block_schema.xml" size="1170"/>

 <file name="contact.xml" size="453"/>

 ...

 <directory name="output">

         <directory name="images"/>

 </directory>

</directory>

 

© 2018-2024 Altova GmbH