XMLTemplateParserUnit

Gruppe

Integration Units

Klassenname

com.ebd.hub.datawizard.iu.XMLTemplateParserUnit

Funktion

Erzeugt eine XML-Datei aus einem Ausgangsbaum, unter Nutzung einer Template-Datei.

Beschreibung


Wichtiger Hinweis: Bitte Verwenden Sie für Neuentwicklungen die XMLNoTemplateUnit.

Einleitung: Integration Units.


Die XMLTemplateParserUnit erzeugt eine XML-Datei aus einem Ausgangsbaum, unter Nutzung einer Template-Datei.

Beschreibung der Parameter


Parametername

Erlaubte Werte

Default-Wert

Beschreibung

Insert this DOCTYPE declaration



Die DOCTYPE-Deklaration, die nach der Generierung des XML eingesetzt werden soll. Die DOCTYPE-Deklaration kann nicht Bestandteil des Templates sein, da der für die Generierung verwendete XML-Generator sonst mit einem Fehler abbricht.

Replace orig. string by



Des Name des Zeichensatzes, der in den XML-Header aufgenommen werden soll. Achtung: Der gleiche Zeichensatz muss beim entsprechenden Ausgangsweg in Phase 6 des Profils angegeben werden, damit die Datei auch tatsächlich damit ausgegeben wird. Ansonsten ist mit Fehlern auf Leseseite zu rechnen (Pflichtwert).

Search for orig. string



Text, nach dem gesucht und durch den in Replace orig. string by angegebenen Text ersetzt werden soll, nachdem das XML erzeugt wurde.

Text mode (…)

normalize, preserve, trim, trim-full-white

trim

Regelt die Art, wie Werte in das XML aufgenommen werden sollen.

  • preserve - Der Text wird unverändert übernommen. Alle Leerzeichen (führend, nachfolgend, …) verbleiben im XML.

  • trim-full-white - Siehe preserve mit der Ausnahme, dass ein Text, der nur aus Leerzeichen besteht, durch einen leeren Text ersetzt wird.

  • trim - Alle führenden und nachfolgenden Leerzeichen werden entfernt.

  • normalize - Siehe trim mit der zusätzlichen Funktion, dass aufeinander folgende, innere Leerzeichen zu einem einzelnen zusammengefasst werden (..1..2.. → 1.2, ein Punkt repräsentiert ein Leerzeichen).

Write xml in a single line

true, false

false

true, wenn das resultierende XML nur in einer Zeile stehen soll.

expand empty nodes

true, false

false

true, wenn Tags bei leeren Werten in der Art <tag></tag>. false, wenn sie in der Art <tag/> ausgegeben werden sollen.

file encoding


UTF-8


template-file



Der Name der zu verwendenden Template-Datei (Pflichtwert). Siehe folgenden Abschnitt.

with empty fields

true, false

false

true, wenn leere Felder im resultierenden XML verbleiben sollen.

Erzeugen einer XML-Vorlage (Template)


Gegeben sei folgende Ausgangsstruktur.


images/download/attachments/36575870/XMLTemplateParser-version-1-modificationdate-1561703902000-api-v2.png


Zu einem Auftrag (Order) gehört genau ein Auftragskopf (OrderHeader) und beliebig viele Auftragspositionen (OrderPosition). Zu jeder Auftragsposition gehört genau ein Datensatz des Typs Position, zu dem mehrere Texte (PosText) angegeben werden können. In einem Durchlauf können ein oder mehrere Aufträge erzeugt werden.

Eine Vorlage kann mit einem üblichen Text-Editor erzeugt werden. Sie muss sich lediglich an gewisse Vorgaben halten, um von der Unit korrekt mit Daten gefüllt zu werden. Im Normalfall kann man aus der Zielstruktur die XML-Vorlage automatisch erzeugen. In komplizierteren Fällen ist danach eine manuelle Bearbeitung der Vorlage notwendig.

Zum automatischen Erzeugen einfach im Zielstruktur-Menü den Eintrag XML-Vorlage für IU erzeugen drücken.

Hinweis: Nach jeder Änderung der Zielstruktur muss das XML-Template entweder neu generiert werden, oder man manuell korrigiert werden. Für unsere Beispiel-Ausgangsstruktur würde die automatisch erzeugte Vorlage folgendermaßen aussehen.


template.xml
<?xml version="1.0" encoding="UTF-8"?>
<DataWizardDummyRoot>
<!--This root element is used to ensure a valid XML file.
Valid means in this context: The file has one single root element.
Remove the dummy root element after you made sure that the generated data XML file will also have only one single root element.
That means, the top element of the XML tree will not be repeated while filling the template with data.-->
<DataWizardSection node="Order">
<Order>
<DataWizardSection node="OrderHeader">
<OrderHeader>
<OrderNo>@OrderNo@</OrderNo>
<CustomerNo>@CustomerNo@</CustomerNo>
</OrderHeader>
</DataWizardSection>
<DataWizardSection node="OrderPosition">
<OrderPosition>
<DataWizardSection node="Position">
<Position>
<PosNo>@PosNo@</PosNo>
<ArticleNo>@ArticleNo@</ArticleNo>
<Quantity>@Quantity@</Quantity>
<DataWizardSection node="PosText">
<PosText>
<PosTextNo>@PosTextNo@</PosTextNo>
<Text>@Text@</Text>
</PosText>
</DataWizardSection>
</Position>
</DataWizardSection>
</OrderPosition>
</DataWizardSection>
</Order>
</DataWizardSection>
</DataWizardDummyRoot>

Erläuterung der Vorlage


Wurzelelement


Jedes XML-Dokument muss eine Wurzel haben, also ein Tag, das den kompletten Inhalt einschließt. In unserem Beispiel ist das das automatisch erzeugte Tag <DataWizardDummyRoot>, welches man zum Beispiel manuell ändern könnte zu <OrderList>.

Hinweis: Die XML-Deklaration in der erstellten XML-Datei wird nicht aus dem XML-Template entnommen.

DataWizardSection-Tags


Jedem Knoten der Datenstruktur muss ein solcher Abschnitt zugeordnet werden, und zwar entsprechend der Baumstruktur in Lobster_data. Für jedes Vorkommen dieses Knotens wird einmal alles ausgegeben, was sich innerhalb befindet. Für jeden Auftrag in unseren Daten wird der Knoten Order einmal durchlaufen, entsprechend wird alles, was zwischen den Tags <DataWizardSection node="Order"> und </DataWizardSection> steht, pro Auftrag einmal ausgegeben. Das Attribut node gibt hierbei an, zu welchem Knoten diese DataWizardSection gehört. Innerhalb dieses Blocks können wir nun entweder den Knoten OrderHeader, oder den Knoten OrderPosition betreten. Also finden sich hier nun die beiden Abschnitte (DataWizardSection), die diesen Knoten zugeordnet sind. Und innerhalb des OrderPosition-Abschnittes finden sich dann die Abschnitte für Position und PosText. So wird mittels der DataWizardSection-Tags die Struktur des Zielbaumes nachgebildet.

Daten-Felder


Den Inhalt von Datenfeldern kann man entweder als Inhalt von XML-Elementen einfügen, oder als Wert von Attributen. Ein Beispiel findet sich z. B. in der Zeile <PosNo>@PosNo@</PosNo>. Das Zeichen @ klammert den Namen des Feldes ein.

Verwendung von Variablen


Ausserhalb von DataWizardSections, also speziell im Wurzelelement kann man für Attributwerte, oder Feldwerte auch Variablen in der Notation @VAR_NAME@ verwenden, die im Profil definiert sind. Die Variablennamen müssen mit VAR_ in beliebiger Groß-/Kleinschreibweise beginnen. Es wird immer der letzte Wert der Variablen am Ende der Phase 3 verwendet. Wenn in den Profil-Eigenschaften die Schalter Pro Datenblatt Antwort beschreiten und IU mit einbeziehen gesetzt sind, wird jeweils der letzte Wert der Variablen im Datenblatt verwendet.

Ergebnis des Beispiels


Mit ein paar einfachen Testdaten wurde mit der oben angegebenen Datenstruktur und der obigen (leicht angepassten) Vorlage folgende Datei generiert.


order_list.xml
<?xml version="1.0" encoding="UTF-8"?>
<OrderList>
<Order>
<OrderHeader>
<OrderNo>0815</OrderNo>
<CustomerNo>11223344</CustomerNo>
</OrderHeader>
<OrderPosition>
<Position>
<PosNo>1</PosNo>
<ArticleNo>4711</ArticleNo>
<Quantity>10</Quantity>
</Position>
</OrderPosition>
<OrderPosition>
<Position>
<PosNo>2</PosNo>
<ArticleNo>4712</ArticleNo>
<Quantity>7</Quantity>
</Position>
</OrderPosition>
<OrderPosition>
<Position>
<PosNo>3</PosNo>
<ArticleNo>4713</ArticleNo>
<Quantity>15</Quantity>
</Position>
<PosText>
<PosNoText>1</PosNoText>
<Text>just any text</Text>
</PosText>
<PosText>
<PosNoText>2</PosNoText>
<Text>and another text</Text>
</PosText>
</OrderPosition>
</Order>
</OrderList>