xsl:merge
Mit Hilfe von xsl:merge können mehrere Input-Dateien zusammengeführt werden. Ein Beispiel kann das Zusammenführen von Fehlerlogs verschiedener Systeme sein.
Die einzelnen Input-Dateien (auch mehrere, verschieden aufgebaute XML-Dateien) werden mit dem xsl:merge-source-Element angegeben.
Beim Zusammenführen der einzelnen Dateien werden die Einträge sortiert. Die Sortierung wird in <xsl:merge-key select="@timestamp"> angegeben.
Wird die Merge-Anweisung im Streaming verwendet, ist die Vorraussetzung, dass alle Input-Dateien bereits vorsortiert sind. Die Möglichkeit, die Input-Dateien vor dem Merge zu sortieren, besteht nicht. Der Versuch nicht vorsortierte Dateien zusammenzuführen, führt zum Abbruch der Transformation.
Im Code-Beispiel Einführungsbeispiel zu xsl:merge (XSLT) wird gezeigt, wie die beiden unterschiedlich aufgebauten Log-Dateien aus den Code-Beispielen Einführungsbeispiel zu xsl:merge (Input 1) und Einführungsbeispiel zu xsl:merge (Input 2) zusammengeführt werden.
Code-Beispiel: Einführungsbeispiel zu xsl:merge (Input 1).
<events>
<event timestamp="2009-08-20T12:01:01Z">A1 Transaction T1234 started</event>
<event timestamp="2009-08-20T12:01:08Z">A1 Transaction T1235 started</event>
<event timestamp="2009-09-20T12:01:12Z">A1 Transaction T1235 ended</event>
<event timestamp="2009-09-20T12:01:15Z">A1 Transaction T1234 ended</event>
</events>
Input-Datei 1 für das Zusammenführen von Log-Einträgen.
Code-Beispiel: Einführungsbeispiel zu xsl:merge (Input 2).
<log>
<day>
<record time="2009-08-20T12:01:01Z">B1 Transaction T1234 started</record>
<record time="2009-08-20T12:01:08Z">B1 Transaction T1235 started</record>
</day>
<day>
<record time="2009-09-20T12:01:12Z">B1 Transaction T1235 ended</record>
<record time="2009-09-20T12:01:15Z">B1 Transaction T1234 ended</record>
</day>
</log>
Anders aufgebaute Input-Datei 2 für das Zusammenführen von Log-Einträgen.
Code-Beispiel: Einführungsbeispiel zu xsl:merge (XSLT).
<xsl:template match="events">
<Log>
<xsl:merge>
<xsl:merge-source for-each-stream="'../in/Log_A_1.xml', '../in/Log_A_2.xml'" select="/events/event">
<xsl:merge-key select="@timestamp"/>
</xsl:merge-source>
<xsl:merge-source for-each-stream="'../in/Log_B_1.xml'" select="/log/day/record">
<xsl:merge-key select="@time"/>
</xsl:merge-source>
<xsl:merge-action>
<xsl:apply-templates select="current-merge-group()"/>
</xsl:merge-action>
</xsl:merge>
</Log>
</xsl:template>
Beispiel, um die Log-Dateien Log_A_1.xml, Log_A_2.xml und Log_B_1.xml zusammenzuführen. Die beiden "A"-Dateien sind anders als die "B"-Datei aufgebaut.
Zeile 3: Start der xsl:merge-Anweisung.
Zeile 4: Angabe der "A"-Input-Dateien für den Merge.
Zeile 5: Angabe des Merge-Keys, nach welchem die "A"-Input-Dateien vorsortiert sind.
Zeile 7: Angabe der "B"-Input-Datei. Diese Angabe ist nötig, weil die "B"-Datei anders als die "A"-Dateien aufgebaut ist.
Zeile 8: Angabe des Merge-Keys der "B"-Input-Datei.
Zeile 10: Angabe der Aktion, welche mit den zusammengeführten Elementen durchgeführt werden soll.
Zeile 11: Mit current-merge-group() kann das zusammengeführte Element weiterverarbeitet werden.
Übungen zu xsl:merge
- Zusammenführen von Mitarbeiterlisten (Übung 7)
- Gelbe Seiten (Übung 8)
<< zurück | vor >> |
Tipp der data2type-Redaktion: Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |