Altova MapForce 2024 Professional Edition

Gibt die Position eines Datenelements innerhalb der gerade verarbeiteten Sequenz von Datenelementen zurück. Damit können Datenelemente z.B. automatisch sequenziell nummeriert werden.

mf-func-position

 

Sprachen

Built-in, C++, C#, Java, XQuery, XSLT 1.0, XSLT 2.0, XSLT 3.0..

 

Parameter

Name

Beschreibung

node

Mit diesem Input muss ein Mapping-Datenelement verbunden werden, das eine Sequenz von null oder mehr Werten liefert. So kann damit etwa ein Datenelement aus einer XML-Quelldatei, einem CSV-Feld, einem Datenbankdatensatz, usw. verbunden werden.

 

Beispiel

Im folgenden Mapping wird gezeigt, wie Sie mit Hilfe der position-Funktion in den vom Mapping generierten Daten eindeutige Identifikationswerte generieren. Die Mapping-Design-Datei zu diesem Beispiel finden Sie unter dem folgenden Pfad: <Dokumente>\Altova\MapForce2024\MapForceExamples\ContactsFromBranchOffices.mfd.

 

mf_map_ContactsFromBranchOffices

ContactsFromBranchOffices.mfd

Die XML-Quelldatei im obigen Mapping enthält drei Niederlassungen (branch offices). Eine Niederlassung kann beliebig viele Contact Child-Elemente enthalten. Ziel des Mappings ist folgendes:

 

Extrahierung aller Contact-Datenelemente aus der XML-Quelldatei und Schreiben der Daten in eine XML-Zieldatei.

Jedem Kontakt muss eine eindeutige Idenifikationsnummer zugewiesen werden (das Datenelement ID in der XML-Zielkomponente).

Die ID jedes Kontakts muss die Form CXX-YYYYY haben, wobei X die Nummer der Niederlassung (Office) und Y die Nummer des Kontakts (Contact) ist. Wenn die Niederlassungsnummer weniger als zwei Zeichen hat, müssen ihr links Nullen vorangestellt werden. Wenn die Kontaktnummer weniger als fünf Zeichen hat, müssen ihr links ebenfalls Nullen vorangestellt werden. Eine gültige Identifikationsnummer des ersten Kontakts aus der ersten Niederlassung wäre folglich C01-00001.

 

Dieses Ziel wurde mit Hilfe einer Reihe von MapForce-Funktionen, darunter der Funktion position, erreicht. Die obere position-Funktion ruft die Position der einzelnen office-Elemente ab. Die untere ruft die Position der einzelnen Kontakte im Kontext der einzelnen office-Elemente ab.

 

Bei Verwendung der position-Funktion muss der aktuelle Mapping-Kontext berücksichtigt werden. Das heißt, bei Ausführung des Mappings wird der Anfangs-Mapping-Kontext anhand des Root-Elements der Zielkomponente zu dem damit (auch indirekt über Funktionen) verbundenen Quelldatenelement ermittelt. In diesem Beispiel verarbeitet die obere position-Funktion die Sequenz aller Niederlassungen (office) und generiert anfangs für die erste Niederlassung in der Sequenz den Wert 1. Die untere position-Funktion generiert eine sequenzielle Nummerierung für die Position des Kontakts (Contact) im Kontext dieses office-Elements (1, 2, 3, usw.). Beachten Sie, dass diese "innere" Sequenz zurückgesetzt wird (und daher wieder mit 1 beginnt), wenn das nächste office-Element verarbeitet wird. Beide pad-string-left-Funktionen wenden gemäß den zuvor angeführten Anforderungen Füllzeichen auf die generierten Nummern an. Die concat-Funktion wird (aufgrund der übergeordneten Verbindung vom Contact-Element in der Quellkomponente zum Contact-Element in der Zielkomponente) im Kontext der einzelnen Kontakte angewendet. Sie verbindet alle berechneten Werte und gibt die eindeutige Identifikationsnummer der einzelnen Kontakte zurück.

 

Unten sehen Sie das Ergebnis, das vom oben gezeigten Mapping generiert wird (beachten Sie, dass einige der Datensätze aus Gründen der Übersichtlichkeit entfernt wurden):

 

<Contacts>
  <Contact>
    <ID>C01-00001</ID>
    <First>Vernon</First>
    <Last>Callaby</Last>
  </Contact>
  <Contact>
    <ID>C01-00002</ID>
    <First>Frank</First>
    <Last>Further</Last>
  </Contact>
  <!-- ... -->
  <Contact>
    <ID>C02-00001</ID>
    <First>Steve</First>
    <Last>Meier</Last>
  </Contact>
  <Contact>
    <ID>C02-00002</ID>
    <First>Theo</First>
    <Last>Bone</Last>
  </Contact>
  <!-- ... -->
</Contacts>

 

In einigen Fällen müssen Sie eventuell die Position von Datenelementen nach Anwendung eines Filters ermitteln. Beachten Sie, dass es sich bei der Filterkomponente nicht um eine Sequenz-Funktion handelt. Sie kann nicht direkt zusammen mit der position-Funktion verwendet werden, um die Position gefilterter Datenelemente zu finden. Dies kann indirekt durch Hinzufügen einer Variablen-Komponente zum Mapping ermittelt werden. Das unten gezeigte Mapping ist eine vereinfachte Version des vorherigen Mappings. Die verwendete Mapping-Design-Datei finden Sie unter dem folgenden Pfad: <Dokumente>\Altova\MapForce2024\MapForceExamples\PositionInFilteredSequence.mfd.

mf_map_PositionInFilteredSequence

Das Ergebnis von Variablen in MapForce sind immer Sequenzen. Daher iteriert die position-Funktion im obigen Mapping durch die durch die Variable erstellte Sequenz und gibt die Position in den einzelnen Datenelementen in dieser Sequenz zurück. Dieses Mapping wird unter Beispiel: Filtern und Nummerieren von Nodes ausführlicher erläutert.

© 2017-2023 Altova GmbH