Altova MapForce 2024 Professional Edition

Cet exemple montre comment traiter plusieurs nœud d'un document XML et faire mapper le résultat comme une valeur unique dans un document XML de cible. Plus spécifiquement, l'objectif du mappage est de calculer le prix de tous les produits dans un fichier XML de source et l'écrire en tant que valeur unique dans un fichier XML de sortie. Les fichiers utilisés dans cet exemple sont disponibles dans le dossier <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\ :

 

Summing-nodes.mfd — le fichier de mappage

input.xml — le fichier XML de source

input.xsd — le schéma XML de source

output.xsd — le schéma XML de cible

Summing-nodes.xslt — Une feuille de style XSLT personnalisée contenant un modèle nommé pour additionner les nœuds individuels.

 

Il existe deux moyens différents d'atteindre l'objectif du 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: Utiliser la fonction d'agrégation "sum"

Pour utiliser la fonction sum dans le mappage, la glisser depuis la fenêtre Bibliothèques dans le mappage. Veuillez noter que les fonctions disponibles dans la fenêtre Bibliothèques dépendent de la version de langage XSLT que vous avez sélectionné (XSLT 1 ou XSLT 2). Ensuite, créer les connexions de mappage comme indiqué ci-dessous.

mf_map_summing-nodes1

 

Pour plus d'informations concernant les fonctions d'agrégation de la bibliothèque core, voir aussi core | aggregate functions.

 

Solution 2: Utiliser une feuille de style XSLT personnalisée

Comme mentionné ci-dessus, l'objectif de l'exemple est d'additionner les champs Price des produits dans le fichier XML de source, dans ce cas, 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>

 

L'extrait de code ci-dessous montre une feuille de style XSLT personnalisée qui utilise le modèle nommé "Total" et un seul paramètre string. Le modèle fonctionne par le biais du fichier d'entrée XML 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, modifier la déclaration de feuille de style en version="2.0".

 

Avant d'importer la feuille de style XSLT dans MapForce, choisir XSLT 1.0 en tant que langage de transformation. Vous êtes maintenant 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.Chercher <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\Summing-nodes.xslt, et cliquer 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_import_xslt_example_01

4.Glisser la fonction Total depuis les Bibliothèques dans le mappage, et créer les connexions de mappage comme indiqué ci-dessous.

mf_map_summing-nodes2

 

Pour consulter le résultat de mappage, cliquer sur l'onglet Sortie. La somme de deux champs Price est maintenant affiché 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>

© 2018-2024 Altova GmbH