Altova MapForce 2023 Professional Edition

Este ejemplo explica cómo procesar varios nodos de un documento XML y asignar el resultado en forma de un solo valor a un documento XML de destino. Concretamente el objetivo de esta asignación de datos es calcular el precio de todos los productos de un archivo XML de origen y escribirlo como un solo valor en un archivo XML de salida. Los archivos utilizados en este ejemplo están en la carpeta <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\:

 

Summing-nodes.mfd: el archivo de asignación de datos

input.xml: el archivo XML de origen

input.xsd: el esquema XML de origen

output.xsd: el esquema XML de destino

Summing-nodes.xslt: una hoja de estilos XSLT personal que contiene una plantilla con nombre que sumará los nodos.

 

Hay dos maneras de conseguir nuestro objetivo:

 

con ayuda de la función de agregado sum de la biblioteca core.

importando una hoja de estilos XSLT personal en MapForce.

 

Solución nº1: usar la función de agregado "sum"

Para usar la función de agregado sum a la asignación basta con arrastrarla desde la ventana Bibliotecas hasta el panel de asignación. Recuerde que las funciones que aparecen en la ventana Bibliotecas dependen del lenguaje de transformación que esté seleccionado. Tras colocar la función en el área de asignación deberá crear las conexiones de asignación que aparecen en esta imagen:

mf_map_summing-nodes1

 

Para más información sobre las funciones de agregado de la biblioteca core consulte el apartado core | aggregate functions (agregado).

 

Solución nº2: usar una hoja de estilos XSLT personal

El objetivo del ejemplo es sumar los campos Price de los productos del archivo XML de origen (en este caso los productos A y 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>

 

A continuación puede ver una hoja de estilos XSLT personal que usa la plantilla con nombre "Total" y un solo parámetro string. La plantilla recorre el archivo XML de entrada y suma todos los valores que obtiene la expresión /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>

 

Nota:para sumar los nodos en XSLT 2.0 debe cambiar la declaración de hoja de estilos por version="2.0".

 

Para importar la hoja de estilos XSLT en MapForce:

 

1.Haga clic en el botón Agregar o quitar bibliotecas, en la parte inferior de la ventana Bibliotecas. Se abre la ventana Gestionar bibliotecas.

mf_manage_libraries_window_empty

2.Para importar funciones como biblioteca local (dentro del archivo de asignación actual solamente), haga clic en Agregar bajo el nombre de la asignación activa. Para importar funciones como biblioteca global (a nivel de programa), haga clic en Agregar, junto a Bibliotecas globales importadas. Cuando se importa una biblioteca de forma local, puede hacer que la ruta de acceso al archivo de la biblioteca sea relativa al archivo de asignación. Con las bibliotecas globales la ruta siempre es absoluta.

 

3.En el cuadro de diálogo "Opciones" haga clic en el botón Agregar. Navegue hasta el archivo <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\Summing-nodes.xslt.

mf_map_summing-nodes1a

4.Arrastre la función Total de la biblioteca recién añadida (Summing-nodes) hasta el área de asignación y cree las conexiones que aparecen en esta imagen:

mf_map_summing-nodes2

Haga clic en el panel Resultados para obtener una vista previa del resultado de la asignación. La suma de los dos campos Price aparecen ahora en el campo 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>

© 2016-2022 Altova GmbH