Dynamische Verarbeitung und Generierung von Dateien

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Tutorials >

Dynamische Verarbeitung und Generierung von Dateien

In diesem Tutorial wird gezeigt, wie Sie Daten aus mehreren XML-Quelldateien lesen und in derselben Transformation in mehrere Zieldateien schreiben. Um dies zu veranschaulichen, werden wir nun ein Mapping erstellen, mit dem Folgendes bewerkstelligt werden soll:

 

1.Lesen der Daten aus mehreren XML-Dateien im selben Verzeichnis.
2.Konvertieren der einzelnen Dateien in ein neues XML-Schema.
3.Generieren einer neuen XML-Zieldatei (mit dem neuen Schema) für jede XML-Quelldatei.
4.Entfernen der XML- und Namespace-Deklaration aus den generierten Dateien.

Tutorial_Process_and_Generate_Multiple_Files

Abstraktes Modell der Datentransformation

Als XML-Quelldateien verwenden wir die drei Dateien bookentry1.xml, bookentry2.xml und bookentry3.xml aus dem Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\. In jeder der drei Dateien ist ein einzelnes Buch gespeichert.

 

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="1">
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <category>Fiction</category>
    <year>1876</year>
  </book>
</books>

bookentry1.xml

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="2">
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <category>Fiction</category>
    <year>1912</year>
  </book>
</books>

bookentry2.xml

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="3">
    <author>Herman Melville</author>
    <title>Moby Dick</title>
    <category>Fiction</category>
    <year>1851</year>
  </book>
</books>

bookentry3.xml

Für die XML-Quelldateien wird das Schema books.xsd aus dem Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\ verwendet. Um die Quelldateien in eine neue XML-Schemadatei zu konvertieren, verwenden wir das Schema library.xsd aus demselben Ordner. Nach der Transformation generiert das Mapping drei Dateien anhand dieses neuen Schemas (siehe Codefragmente unten). Wir werden das Mapping so konfigurieren, dass die Namen der drei generierten Dateien publication1.xml, publication2.xml und publication3.xml lauten. Beachten Sie, dass die XML-Deklaration und die Namespace-Deklaration entfernt werden müssen.

 

<library>
  <publication>
    <id>1</id>
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <genre>Fiction</genre>
    <publish_year>1876</publish_year>
  </publication>
</library>

publication1.xml

<library>
  <publication>
    <id>2</id>
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <genre>Fiction</genre>
    <publish_year>1912</publish_year>
  </publication>
</library>

publication2.xml

<library>
  <publication>
    <id>3</id>
    <author>Herman Melville</author>
    <title>Moby Dick</title>
    <genre>Fiction</genre>
    <publish_year>1851</publish_year>
  </publication>
</library>

publication3.xml

Gehen Sie dazu folgendermaßen vor:

 

 

Schritt 1: Vorbereiten der Mapping-Design-Datei

Als Ausgangsbasis wird in diesem Tutorial die Datei BooksToLibrary.mfd aus dem Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\ verwendet. Sie haben dieses Mapping bereits im Tutorial Konvertieren von XML in ein neues Schema erstellt. Öffnen Sie zuerst die Datei BooksToLibrary.mfd in MapForce und speichern Sie sie unter einem neuen Namen im selben Ordner.

 

Die neue Mapping-Datei muss im Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\ gespeichert werden, da mehrere Dateien von dieser Datei aus referenziert werden.

mfdBooksToLibrary-BAS

BooksToLibrary.mfd (MapForce Basic Edition)

 

Schritt 2: Konfigurieren des Input

Damit in MapForce mehrere XML-Instanzdateien verarbeitet werden, doppelklicken Sie auf die Überschrift der Quellkomponente. Geben Sie im Dialogfeld "Komponenteneinstellungen" als Input-Datei bookentry*.xml ein.

tut-02-01-BAS

Dialogfeld "Komponenteneinstellungen"

Aufgrund des Platzhalterzeichens * im Dateinamen verwendet MapForce alle Dateien mit dem Präfix bookentry als Mapping-Input. Da es sich um einen relativen Pfad handelt, sucht MapForce nach allen bookentry-Dateien im selben Verzeichnis wie die Mapping-Datei. Beachten Sie, dass Sie bei Bedarf auch einen absoluten Pfad eingeben und trotzdem das Platzhalterzeichen * verwenden können.

 

 

Schritt 3: Konfigurieren der Ausgabe

Um Dateinamen für die einzelnen Ausgabedateien zu erstellen, verwenden wir die concat-Funktion. Diese Funktion verkettet (verbindet) alle als Argument gelieferten Werte miteinander.

 

So erstellen Sie den Dateinamen mit Hilfe der concat-Funktion:

 

1.Suchen Sie die concat-Funktion im Fenster "Bibliotheken" und ziehen Sie sie in den Mapping-Bereich. Standardmäßig wird diese Funktion mit zwei Parametern zum Mapping hinzugefügt. Sie können jedoch auch, falls nötig, neue Parameter hinzufügen. Klicken Sie in der Funktionskomponente auf das Symbol Parameter hinzufügen ( gui_add_function_parameter ) und fügen Sie einen dritten Parameter hinzu. Beachten Sie, dass Sie einen Parameter durch Klicken auf das Symbol Parameter löschen ( gui_delete_function_parameter ) löschen können.

tut-02-02-BAS

2.Fügen Sie eine Konstante ein (Klicken Sie im Menü Einfügen auf Konstante). Wenn Sie aufgefordert werden, einen Wert anzugeben, geben Sie "publication" ein und belassen Sie die Option String aktiviert.

tut-02-03-BAS

3.Verbinden Sie die Konstante mit value1 der concat-Funktion.

tut-02-04-BAS

4.Verbinden Sie das Attribut id der Quellkomponente mit value2 der concat-Funktion.

tut-02-05-BAS

5.Suchen Sie im Bibliotheksfenster die Funktion get-fileext und ziehen Sie sie in den Mapping-Bereich. Erstellen Sie eine Verbindung vom obersten Node der Quellkomponente (Datei: books.xml) zum Parameter filepath dieser Funktion. Erstellen Sie anschließend eine Verbindung vom Ergebnis der Funktion get-fileext zu value3 der concat-Funktion. Auf diese Art extrahieren Sie nur die Dateierweiterung (in diesem Fall .xml) aus dem Namen der Quelldatei.

tut-02-06-BAS

Sie haben bisher als Parameter der concat-Funktion die drei Werte zur Verfügung gestellt, die zusammengesetzt den Namen der generierten Datei ergeben (z.B. publication1.xml):

 

Bestandteil

Beispiel

Die Konstante "publication" liefert den Konstanten-String-Wert "publication".

publication

Das Attribut id der XML-Quelldatei liefert den eindeutigen ID-Wert für die einzelnen Dateien. Dadurch wird verhindert, dass alle Dateien mit demselben Namen generiert werden.

1

Die Funktion get-fileext gibt die Erweiterung des zu generierenden Dateinamens zurück.

.xml

 

Sie können MapForce nun anweisen, den Dateinamen bei der Ausführung des Mappings zu erstellen. Klicken Sie dazu auf die Schaltfläche Datei ( btn_file ) bzw. Datei/String ( btn_file_string ) der Zielkomponente und wählen Sie die Option Über das Mapping bereitgestellte dynamische Dateinamen verwenden.

tut-02-07-ENT

MapForce generiert dadurch die Instanzdateien dynamisch anhand des jeweils durch das Mapping bereitgestellten Namens. In diesem Beispiel wird der Name durch die concat-Funktion erstellt; wir verbinden daher das Ergebnis der concat-Funktion mit dem Node Datei: <dynamisch> der Zielkomponente.

tut-02-08-BAS

Wenn Sie nun auf die Überschrift der Zielkomponenten doppelklicken, sehen Sie, dass die Textfelder XML-Input-Datei und XML-Output-Datei deaktiviert sind und darin angezeigt wird <Vom Mapping bereitgestellte Dateinamen>.

tut-02-09-BAS

Dies gibt an, dass die Instanzdateinamen dynamisch über ein Mapping bereitgestellt werden, daher müssen diese nicht mehr in den Komponenteneinstellungen definiert werden.

 

Schließlich müssen Sie noch den XML-Namespace und die Schema-Deklaration aus der Zielkomponente entfernen. Deaktivieren Sie dazu im Dialogfeld "Komponenteneinstellungen" die Kontrollkästchen Schema- / DTD-Referenz hinzufügen... und XML-Deklaration schreiben.

tut-02-10-BAS

Sie können das Mapping nun ausführen und das Ergebnis sowie die Namen der generierten Dateien sehen. Mit diesem Mapping werden mehrere Ausgabedateien generiert. Um durch die Ausgabedateien zu navigieren, verwenden Sie die Pfeilschaltflächen in der linken oberen Ecke des Ausgabefensters oder wählen Sie eine Datei aus der daneben liegenden Dropdown-Liste aus.

tut-02-11-BAS


© 2019 Altova GmbH