Altova MapForce 2024 Basic Edition

Beispiel: Mappen von Elementnamen auf Attributwerte

Zur Startseite Zurück Nach oben Weiter

In diesem Beispiel wird gezeigt, wie Sie Elementnamen aus einem XML-Dokument auf Attributwerte in einem XML-Zieldokument mappen. Das Mapping zu diesem Beispiel finden Sie im folgenden Ordner: <Dokumente>\Altova\MapForce2024\MapForceExamples\ConvertProducts.mfd.

 

Betrachten wir zur Erläuterung des Beispiels folgendes Szenario: Angenommen Sie haben eine XML-Datei, die eine Liste von Produkten enthält. Jedes Produkt hat das folgende Format:

 

  <product>

    <id>1</id>

    <color>red</color>

    <size>10</size>

  </product>

 

Unser Ziel ist es, Informationen zu jedem Produkt in ein Namen-Wert-Paar zu konvertieren, z.B.:

 

  <product>
    <attribute name="id" value="1" />
    <attribute name="color" value="red" />
    <attribute name="size" value="10" />
</product>

 

Um ein Mapping wie das oben beschriebene mit möglichst wenig Aufwand durchzuführen, wird in diesem Beispiel eine MapForce-Funktion namens "dynamischer Zugriff auf Node-Namen" verwendet. "Dynamisch" bedeutet, dass die Node-Namen (und nicht nur die Werte) während der Ausführung des Mappings gelesen und als Werte geschrieben werden. Das Mapping dazu wird in wenigen Schritten folgendermaßen erstellt:

 

Schritt 1: Hinzufügen der XML-Quellkomponente zum Mapping

Klicken Sie im Menü Einfügen auf XML-Schema/Datei und navigieren Sie zur folgenden Datei: <Dokumente>\Altova\MapForce2024\MapForceExamples\Products.xml. Diese XML-Datei verweist auf das Schema Products.xsd im selben Ordner.

 

Schritt 2: Fügen Sie die XML-Zielkomponente zum Mapping hinzu

Klicken Sie im Menü Einfügen auf XML-Schema/Datei und navigieren Sie zur folgenden Datei: <Dokumente>\Altova\MapForce2024\MapForceExamples\ProductValuePairs.xsd. Wenn Sie aufgefordert werden, eine Instanzdatei anzugeben, klicken Sie auf Überspringen. Wenn Sie aufgefordert werden, ein Root-Element auszuwählen, wählen Sie products als Root-Element.

 

Das Mapping sollte zu diesem Zeitpunkt folgendermaßen aussehen:

mf_map_ConvertProducts_01

 

Schritt 3: Aktivieren Sie den dynamischen Zugriff auf Child-Nodes

1.Klicken Sie mit der rechten Maustaste in der Quellkomponente auf den Node product und wählen Sie im Kontextmenü den Befehl Child-Elemente mit dynamischem Namen anzeigen.

2.Wählen Sie im Dialogfeld, das daraufhin geöffnet wird, text() als Typ aus. Belassen Sie andere Optionen unverändert.

mf_map_ConvertProducts_02

 

Beachten Sie, dass nun ein text()-Node zur Quellkomponente hinzugefügt wurde. Dieser Node stellt den Inhalt der einzelnen Child-Elemente für das Mapping bereit (in diesem Fall den Wert von "id", "color" und "size").

mf_map_ConvertProducts_03

 

Schritt 4: Ziehen Sie die Mapping-Verbindungen

Ziehen Sie schließlich die Mapping-Verbindungen A, B, C, D, wie unten gezeigt. Doppelklicken Sie optional auf die einzelnen Verbindungen und geben Sie von oben nach unten die Buchstaben "A", "B", "C" und "D" in die einzelnen Beschreibungsfelder ein.

mf_map_ConvertProducts_04

ConvertProducts.mfd

Im oben gezeigten Mapping wird mit Verbindung A für jedes Produkt in der Quellkomponente ein Produkt in der Zielkomponente erstellt. Bis jetzt handelt es sich um eine Standard-Mapping-Verbindung, die die Node-Namen nicht berücksichtigt. In Verbindung B wird jedoch für jedes Child-Element von product in der Zielkomponente ein neues Element namens attribute erstellt.

 

Die Verbindung B ist eine entscheidende Verbindung im Mapping, da damit eine Sequenz von Child-Elementen von product von der Quellkomponente in die Zielkomponente übertragen wird. Dabei werden nicht die tatsächlichen Namen oder Werte übertragen. Diese Verbindung ist folgendermaßen zu verstehen: Wenn element() in der Quellkomponente N Child-Elemente hat, so werden in der Zielkomponente N Instanzen dieses Datenelements erstellt. In diesem konkreten Beispiel hat product in der Quellkomponente drei Child-Elemente (id, color und size). Das bedeutet, dass jedes product-Element in der Zieldatei drei Child-Elemente mit dem Namen attribute hat.

 

In diesem Beispiel wird dies zwar nicht gezeigt, doch wird dieselbe Regel auch auf das Mappen von Child-Elemente von attribute() angewendet. Wenn das Datenelement attribute() in der Quellkomponente N Child-Attribute hat, so werden in der Zielkomponente N Instanzen dieses Datenelements erstellt.

 

Als Nächstes werden in Verbindung C die tatsächlichen Namen der einzelnen Child-Elemente von product in die Zielkomponente kopiert (nämlich "id", "color" und "size").

 

Schlussendlich werden in Verbindung D die Werte der einzelnen Child-Elemente von product als String-Typ in die Zielkomponente kopiert.

 

Um eine Vorschau auf die Mapping-Ausgabe zu sehen, klicken Sie auf das Fenster Ausgabe und werfen Sie einen Blick auf die generierte XML-Datei. Wie erwartet und beabsichtigt, enthält die Ausgabe mehrere Produkte, deren Daten als Namen-Wert-Paare gespeichert sind.

 

<?xml version="1.0" encoding="UTF-8"?>
<products xsi:noNamespaceSchemaLocation="ProductValuePairs.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <product>
    <attribute name="id" value="1"/>
    <attribute name="color" value="red"/>
    <attribute name="size" value="10"/>
  </product>
  <product>
    <attribute name="id" value="2"/>
    <attribute name="color" value="blue"/>
    <attribute name="size" value="20"/>
  </product>
  <product>
    <attribute name="id" value="3"/>
    <attribute name="color" value="green"/>
    <attribute name="size" value="30"/>
  </product>
</products>

Generierte Mapping-Ausgabe

© 2017-2023 Altova GmbH