Altova MapForce 2024 Basic Edition

In diesem Beispiel wird gezeigt, wie Sie mehrere Nodes eines XML-Dokuments verarbeiten und die Ergebnisse als einen einzigen Wert auf ein XML-Zieldokument mappen können. Ziel des Mappings ist es, den Preis aller Produkte in einer XML-Quelldatei zu berechnen und diesen als einen einzigen Wert in eine XML-Ausgabedatei zu schreiben. Die in diesem Beispiel verwendeten Dateien stehen im Ordner <Dokumente>\Altova\MapForce2024\MapForceExamples\ zur Verfügung.

 

Summing-nodes.mfd -die Mapping-Datei

input.xml - die XML-Quelldatei

input.xsd - das XML-Quellschema

output.xsd - die XML-Zieldatei

Summing-nodes.xslt - ein benutzerdefiniertes XSLT-Stylesheet, das eine benannte Vorlage zum Summieren der einzelnen Nodes enthält.

 

Es gibt zwei verschiedene Methoden, mit denen Sie das Ziel des Mappings erreichen können:

 

Verwendung der sum-Funktion. Diese vordefinierte MapForce-Funktion steht im Fenster "Bibliotheken" zur Verfügung.

durch Import eines benutzerdefinierten XSLT-Stylesheet in MapForce.

 

Lösungsvariante 1: Verwendung der Aggregatfunktion "sum"

Um die Funktion sum im Mapping zu verwenden, ziehen Sie sie aus dem Fenster Bibliotheken in das Mapping. Beachten Sie, dass es von der ausgewählten XSLT-Version abhängt (XSLT1 oder XSLT2), welche Funktionen im Fenster Bibliotheken zur Verfügung stehen. Erstellen Sie nun die Mapping-Verbindungen wie unten gezeigt.

mf_map_summing-nodes1

Nähere Informationen zu Aggregatfunktionen der core-Bibliothek finden Sie unter core | aggregate functions (Aggregatfunktionen).

 

Lösungsvariante 2: Verwendung eines benutzerdefinierten XSLT-Stylesheet

Wie oben erwähnt, ist das Ziel des Beispiels, die Price-Felder von Produkten in der XML-Quelldatei, in diesem Fall der Produkte A und B, zu summieren.

 

<?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>

 

Im Codefragment unten sehen Sie ein benutzerdefiniertes XSLT-Stylesheet, in dem die benannte Vorlage (named template) "Total" und ein einziger Parameter string verwendet werden. Die Vorlage verarbeitet die XML-Input-Datei und summiert alle durch den XPath-Ausdruck /Product/Price bereitgestellten Werte.

 

<?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>

 

Anmerkung:Um die Nodes in XSLT 2.0 zu summieren, ändern Sie die Stylesheet-Deklaration in version="2.0".

 

Bevor Sie das XSLT-Stylesheet in MapForce importieren, wählen Sie als Transformationssprache XSLT 1.0. aus. Sie können die benutzerdefinierte Funktion nun folgendermaßen importieren:

 

1.Klicken Sie im unteren Bereich des Fensters Bibliotheken auf die Schaltfläche Bibliotheken hinzufügen/entfernen. Daraufhin wird das Fenster Bibliotheken verwalten geöffnet (siehe Abbildung unten).

mf_manage_libraries_window_empty

2.Um Funktionen als lokale Bibliothek (nur im Geltungsbereich des aktuellen Dokuments) zu importieren, klicken Sie auf die Schaltfläche Hinzufügen unterhalb des aktuellen Mapping-Namens. Um Funktionen als globale Bibliothek (auf Programmebene zu importieren, klicken Sie auf die Schaltfläche Hinzufügen neben Globale Bibliotheksimporte. Wenn Sie eine Bibliothek lokal importieren, können Sie den Pfad zur Bibliotheksdatei als relativ zur Mapping-Datei definieren. Bei gobal importierten Bibliotheken ist der Pfad zur importierten Bibliothek immer absolut.

 

3.Navigieren Sie zur Datei <Dokumente>\Altova\MapForce2024\MapForceExamples\Summing-nodes.xslt und klicken Sie auf Öffnen. Daraufhin erscheint ein Meldungsfeld, in dem Sie darüber informiert werden, dass eine neue Bibliothek hinzugefügt wurde, und die neue Bibliothek wird im Fenster "Bibliotheken" angezeigt.

mf_map_summing-nodes1a

4.Ziehen Sie die Funktion Total aus der Bibliothek ins Mapping und erstellen Sie die Mapping-Verbindungen, wie unten gezeigt.

mf_map_summing-nodes2

Um eine Vorschau auf das Mapping-Ergebnis zu sehen, klicken Sie auf das Fenster Ausgabe. Im Feld Total wird nun die Summe der zwei Price-Felder angezeigt.

 

<?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