Datenschutz-Hinweis: Diese Website nutzt Cookies für Funktions-, Komfort- und Statistikzwecke. Um eine detaillierte Beschreibung der verwendeten Cookies einzusehen und bei Bedarf deren Speicherung anpassen, besuchen Sie bitte unsere Datenschutzerklärung.

English

Neues von SoftProject

Ab jetzt keine Neuigkeiten mehr verpassen! 
Melden Sie sich zu unserem kostenlosen X4 Newsletter an.

Lernen Sie uns persönlich kennen!

05.02.2019 – 07.02.2019 E-world energy & water 2019

Expertentipp: XSL-Mapping mit mehreren Input Dokumenten

Es gibt solche Tage, an denen reicht ein einziges XML-Dokument als Input einfach nicht. Dann müssen es zwei oder sogar noch mehr Input-Dokumente sein, die innerhalb eines X4-Prozesses mit einem XSL-Mapping verarbeitet werden wollen. Wie das schnell und sicher gelingt, erfahren Sie in diesem Expertentipp von Software-Entwickler Sascha Stadelmann.

Bevor wir loslegen, gilt es zunächst die Voraussetzungen zu überprüfen. Denn um ein XML-Dokument in einem XSL-Mapping verarbeiten zu können, muss es sich um ein wohlgeformtes XML-Dokument handeln. Das primäre XML-Dokument muss im Prozess vor dem Mapping-Baustein platziert sein. Jedes weitere XML-Dokument, das im gleichen Datenmapping verarbeitet werden soll, wird im X4-Prozess mithilfe einer Kontextvariable im Prozesskontext zwischengespeichert.

Sascha Stadelmann


Software-Entwickler für den X4 Designer bei SoftProject

XSL-Mapping: Der Beispielprozess

X4 Enterprise Service Bus

In unserem X4-Prozess möchten wir innerhalb einer Schleife neue Dokumente verarbeiten, beispielsweise indem wir diese über den File System Adapter laden. Von diesen sollen einige Informationen ausgelesen werden. Dazu speichern wir diese Inputs typischerweise innerhalb der Schleife als Variable.

Die neuen Daten werden in eine weitere Kontextvariable gespeichert, das Input-XML-Dokument wird aus seiner Variable gelesen und anschließend wird unsere XSL-Transformation ausgeführt. Dabei wird die Kontextvariable der neuen XML-Daten mithilfe des context:-URL-Protokolls und der document()-Funktion in das Input XML-Dokument geschrieben. Doch dazu gleich mehr.

Abschließend wird das veränderte Input-XML wieder in seine Kontextvariable gespeichert und durchläuft so lange die Schleife, bis die Verarbeitung abgeschlossen ist.

Beispiel: Iterativer Prozess mit mehreren Inputs
Abbildung: Iterativer Beispielprozess mit mehreren Inputs

Die Kombination macht's: context: und document()

Kommen wir nun zum Herzstück unseres X4-Prozesses – dem XSL-Mapping. Mit der XSLT-Funktion document() lässt sich auf ein externes XML-Dokument zugreifen, oder wie in diesem Fall auf eine Kontextvariable. Dazu können wir den Befehl mit dem Parameter context:DerNamederVariable nutzen. Dieses Konstrukt kann dann beispielsweise im XSL-Mapping in einem select-Ausdruck verwendet werden, ergänzt um einen beliebigen XPath-Ausdruck:

select="document('context:loopInput')/KundenAdresse"

Oder noch kompakter: Kontextvariable als Parameter definieren

Wenn das Dokument an mehren Stellen in einem XSL-Mapping benötigt wird, so kann es nützlich sein, den Zugriff auf das Dokument als globalen Parameter zu definieren. Dazu wird zu Beginn des XSL-Stylesheets ein <param>-Element angelegt. Diesem Parameter wird dann mit dem Attribut name eine Name zugewiesen und ins Attribut select kommt unser Konstrukt zum Zugriff auf die Variable document('context:DerNamederVariable') hinein.

Nun kann das Dokument in allen XPath-Ausdrücken direkt über $NameDesParam genutzt werden.

Beispiel

<?xml version="1.0" encoding="UTF-8"?><?xe.source KundenInput.xml#kunden?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:output method="xml" media-type="text/xml"></xsl:output>
  <xsl:param name="kundenAdresse" select="document('context:loopInput')/KundenAdresse"></xsl:param>
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"></xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
 <xsl:template match="/kunden/kunde[@id = $kundenAdresse/@kundenID]">
    <kunde id="{./@id}"><xsl:apply-templates select="$kundenAdresse/adresse">          
    </xsl:apply-templates></kunde>
  </xsl:template>
</xsl:stylesheet>

Neugierig geworden? Jetzt die X4 Suite in der neuen Version 5.0 mit dem kompletten Funktionsumfang 30 Tage kostenlos testen.

Weiterführende Informationen


X4 Developer Guide

Sie möchten mehr zum context:-Protokoll und zu dessen effizienter Nutzung innerhalb von XSL-Mappings erfahren? Jetzt bei "Mein X4" registrieren und das Dokumentationspaket zur X4 Suite inklusive dem Handbuch X4 Developer Guide herunterladen.

X4 Academy

Qualifizierte Weiterbildung made by SoftProject – Unser Schulungsangebot mit praxisorientierten Trainings rund um den X4 Enterprise Service Bus und XML-Technologien.

Zurück

Über uns


SoftProject GmbH

Die SoftProject GmbH ist ein unabhängiges Software-Haus mit Hauptsitz in Ettlingen bei Karlsruhe. Das im Jahr 2000 gegründete Unternehmen wächst überdurchschnittlich und beschäftigt heute rund 80 Mitarbeiter. Mehr als 300 Unternehmen weltweit setzen mittlerweile auf die SoftProject-Technologie „Made in Germany“.

Als Spezialisten für die Digitalisierung und Automatisierung von Geschäftsprozessen bietet SoftProject Lösungen und Services rund um ihr Kernprodukt, die X4 Suite. Zum Leistungsspektrum zählen außerdem Consulting, Training, Support sowie Hosting für Lösungen auf Basis der X4-Technologie.

© 2018 SoftProject GmbH