Eine
XmlStreamer
-Komponente teilt große XML-Dokumente in kleinere Teile auf. Der
XmlStreamer
teilt die XML-Quelle in Header-, Footer- und Hauptteilsegmente auf. Die Hauptteilsegmente können wiederholende oder nicht wiederholende Segmente enthalten. Der
XmlStreamer
kann jedes XML-Segment einer entsprechenden Umwandlung übergeben, üblicherweise einem Mapper oder einem Serializer.
Ein
XmlStreamer
funktioniert ungefähr auf dieselbe Weise wie ein
Streamer
, abgesehen von einigen kleinen Unterschieden aufgrund der strukturierten XML-Eingabe. Um Folgenden werden die Hauptfunktionen aufgeführt:
Die Hauptteilsegmente werden als XML-Elemente definiert. Sie können den Hauptteil mit mehreren Elementen desselben oder eines anderen Typs in jeder beliebigen Reihenfolge konfigurieren.
Der Header wird als gesamter Teil der XML definiert, der dem ersten Hauptteilsegment vorausgeht. Bei der Konfiguration des
XmlStreamer
ist es nicht erforderlich, die Elemente zu definieren, die der Header umfasst.
Der Footer wird als gesamter Teil der XML definiert, die auf den letzten Hauptteilsegment folgt. Bei der Konfiguration des
XmlStreamer
ist es nicht erforderlich, die Elemente zu definieren, die der Footer umfasst.
Häufig stellen die Header- und die Footer-Segmente keine wohlgeformte XML dar. Damit die Segmente an einen Mapper oder einen Serializer übergeben werden können, können Sie Modifizierer-Komponenten konfigurieren, die die Segmente in wohlgeformte XML umwandeln.
Betrachten Sie für ein besseres Verständnis dieser Funktionen die folgende XML-Quellstruktur:
<stream>
<headerline1>MainHeader</headerline1>
<substreams>
<substream>
<subheaderline1>SubHeader</subheaderline1>
<segments>
<segment1>Segment1A</segment1>
<segment1>Segment1B</segment1>
<segment2>Segment2A</segment2>
<segment1>Segment1C</segment1>
<segment2>Segment2B</segment2>
</segments>
<subfooterline1>SubFooter</subfooterline1>
</substream>
<substream>...</substream>
<substream>...</substream>
</substreams>
<footerline1>MainFooter</footerline1>
</stream>
In diesem Beispiel können Sie die Hauptteilsegmente als
substream
-Elemente definieren. Der Header besteht aus allem, das dem ersten
substream
vorausgeht:
<stream>
<headerline1>MainHeader</headerline1>
<substreams>
Der Footer besteht aus allem, das auf den letzten
substream
folgt:
</substreams>
<footerline1>MainFooter</footerline1>
</stream>
Die Header- und die Footer-Segmente stellen keine wohlgeformte XML dar. Sie können Modifizierer anwenden, die schließende oder öffnende Tags hinzufügen, damit die XML wohlgeformt wird. Beispielsweise kann ein Modifizierer den Header in Folgendes umwandeln:
<stream>
<headerline1>MainHeader</headerline1>
<substreams>
</substreams>
</stream>
Sie können den
XmlStreamer
so konfigurieren, dass das Header-Segment, das Footer-Segment und jede Instanz des
substream
-Segments einer entsprechenden Umwandlung übergeben wird, beispielsweise einem Mapper oder einem Serializer.
Die Header-Segmentelemente sind bei der Verarbeitung der Hauptteilelemente verfügbar. Die Footer-Elemente sind bei der Verarbeitung der Hauptteilelemente jedoch noch nicht verfügbar. Footer-Elemente werden nur verarbeitet, nachdem die Hauptteilelemente von der Umwandlung gelesen wurden.
Alternativ können Sie die
substream
-Elemente in die Segmente
segment1
und
segment2
unterteilen und jedes dieser Segmente an einen eigenen Mapper oder Serializer senden. Beachten Sie, dass
segment1
und
segment2
in einer zufälligen Reihenfolge aufeinander folgen. Der
XmlStreamer
ignoriert die Reihenfolge und verarbeitet
segment1
und
segment2
in der beliebigen Reihenfolge ihres Auftretens.
In der folgenden Abbildung wird die für diesen Zweck entsprechende Konfiguration dargestellt. Das Skript definiert unabhängige Serializer für die Header-, Footer-,
segment1
- und
segment2
-Segmente.
Auch wenn die Footer-Ausführungskomponente in diesem Beispiel vor den Hauptteilelementen angezeigt wird, werden Footer-Elemente erst dann verarbeitet, wenn die Hauptteilelemente von der Umwandlung gelesen wurden.
Für eine weitere Präzisierung können Sie Umwandlungen für die geschachtelten Header und Footer innerhalb der jeweiligen substream-Elemente definieren.