Altova MapForce 2027 Basic Edition

Cet exemple vous montre comment traiter plusieurs nœuds d'un document XML et mapper le résultat sous la forme d'une valeur unique dans un document XML cible. Plus précisément, l'objectif de ce mappage est de calculer le prix de tous les produits contenus dans un fichier XML source et de l'écrire sous la forme d'une valeur unique dans un fichier XML de sortie. Les fichiers utilisés dans cet exemple sont disponibles dans le dossier DocExamples.

 

•Summing-nodes.mfd — le fichier de mappage

•input.xml — le fichier XML source

•input.xsd — le schéma XML source

•output.xsd — le schéma XML cible

•Summing-nodes.xslt — feuille de style XSLT personnalisée contenant un modèle nommé permettant de calculer la somme des nœuds individuels.

 

Il existe deux méthodes différentes pour atteindre l’objectif de ce mappage :

 

•En utilisant la fonction sum. Cette fonction intégrée à MapForce est disponible dans la fenêtre Bibliothèques.

•En important une feuille de style XSLT personnalisée dans MapForce.

 

Solution 1 : En utilisant la fonction d'agrégation « sum »

Pour utiliser la fonction sum dans le mappage, faites-la glisser depuis la fenêtre Bibliothèques vers le mappage. Notez que les fonctions disponibles dans la fenêtre Bibliothèques dépendent de la version du langage XSLT que vous avez sélectionnée (XSLT 1 ou XSLT 2). Créez ensuite les connexions du mappage comme indiqué ci-dessous.

mf_map_summing-nodes1

Pour plus d’informations sur les fonctions d’agrégation de la bibliothèque principale, consultez également la section core | fonctions d’agrégation.

 

Solution 2 : En utilisant une feuille de style XSLT personnalisée

Comme mentionné ci-dessus, l’objectif de cet exemple est de calculer la somme des champs Price des produits dans le fichier XML source, en l’occurrence les produits A et B.

 

<?xml version="1.0" encoding="UTF-8"?>
<Input xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="input.xsd">
  <Products>
    <Product>
        <Name>ProductA</Name>
        <Amount>10</Amount>
        <Price>5</Price>
    </Product>
    <Product>
        <Name>ProductB</Name>
        <Amount>5</Amount>
        <Price>20</Price>
    </Product>
  </Products>
</Input>

 

Le listing de code ci-dessous présente une feuille de style XSLT personnalisée qui utilise le modèle nommé « Total » et une seule chaîne en paramètre. Le modèle parcourt le fichier XML d'entrée et additionne toutes les valeurs obtenues par l'expression XPath /Product/Price.

 

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
 
  <xsl:template match="*">
    <xsl:for-each select=".">
    <xsl:call-template name="Total">
        <xsl:with-param name="string" select="."/>
    </xsl:call-template>
    </xsl:for-each>
  </xsl:template>
     
  <xsl:template name="Total">
  <xsl:param name="string"/>
    <xsl:value-of select="sum($string/Product/Price)"/>
  </xsl:template>
</xsl:stylesheet>

 

Note : Pour additionner les nœuds dans XSLT 2.0, modifiez la déclaration de la feuille de style en indiquant version="2.0".

 

Avant d'importer la feuille de style XSLT dans MapForce, sélectionnez XSLT 1.0 comme langage de transformation. Vous êtes désormais prêt à importer la fonction personnalisée, comme suit :

 

1.Cliquez sur la touche Ajouter/Supprimer des bibliothèques en bas de la fenêtre Bibliothèques. La fenêtre Gérer les Bibliothèques s’ouvre (voir la capture d'écran ci-dessous).

mf_manage_libraries_window_empty

2.Pour importer des fonctions en tant que bibliothèque locale (uniquement dans le cadre du document actuel), cliquez sur Ajouter sous le nom actuel du mappage. Pour importer les fonctions en tant que bibliothèque globale (au niveau du programme), cliquez sur Ajouter à côté des Importations Bibliothèques globales. Lorsque vous importez une bibliothèque localement, vous pouvez définir le chemin du fichier de bibliothèque pour qu'il soit relatif au fichier de mappage. Avec des bibliothèques importées globalement, le chemin de la bibliothèque importée est toujours absolu.

 

3.Recherchez le fichier <Documents>\Altova\MapForce2027\MapForceExamples\DocExamples\Summing-nodes.xslt, puis cliquez sur Ouvrir. Un message apparaît vous informant qu'une nouvelle bibliothèque a été ajoutée et la nouvelle bibliothèque apparaît dans la fenêtre Bibliothèques.

mf_map_summing-nodes1a

4.Faites glisser la fonction Total depuis les bibliothèques vers le mappage, puis créez les connexions de mappage comme indiqué ci-dessous.

mf_map_summing-nodes2

Pour prévisualiser le résultat du mappage, cliquez sur le volet Sortie. La somme des deux champs Price s'affiche désormais dans le champ Total.

 

<?xml version="1.0" encoding="UTF-8"?>
<Output xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="output.xsd">
  <Total>25</Total>
  <Product>
    <Name>ProductA</Name>
    <Amount>10</Amount>
    <Price>5</Price>
  </Product>
  <Product>
    <Name>ProductB</Name>
    <Amount>5</Amount>
    <Price>20</Price>
  </Product>
</Output>

© 2020-2026 Altova GmbH