Node(s) aktualisieren

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

Startseite >  Aktionen > Daten aktualisieren >

Node(s) aktualisieren

Die Aktion "Node(s) aktualisieren" aktualisiert einen oder mehrere angegebene Nodes mit dem definierten Wert. Sowohl "Node aktualisieren" als auch "Wert aktualisieren" wird durch XPath-Ausdrücke definiert. In der Abbildung unten wird der Attribut-Node @Updated des XPath-Kontext-Elements mit dem aktuellen Datum aktualisiert (dies ist das Ergebnis der Auswertung der XPath-Funktion current-date-no-TZ()).

MTDUpdateNode01

Beachten Sie beim Definieren der Aktionen "Node(s) aktualisieren" und "Wert aktualisieren" die folgenden Punkte:

 

die Bedeutung des Kontext-Node für relative Pfade (Nähere Informationen siehe unten).
Der Ziel-Node für die Aktualisierung kann mit der Variablen $MT_TargetNode referenziert werden (Nähere Informationen siehe unten).
Wenn der Quell-Node ein Element mit gemischtem Inhalt (Text und Elemente) ist, so wird nur der Textinhalt des Elements mit gemischtem Inhalt für die Aktualisierung verwendet  (Nähere Informationen siehe unten). Der Textinhalt von untergeordneten Elementen wird ignoriert.
Über ein Array können mehrere Ziel-Nodes definiert werden (Nähere Informationen siehe unten).

 

Bedeutung des Kontext-Node für relative Pfade

Wenn der zu aktualisierende Node als relativer Pfad definiert wird, werden nur diejenigen Nodes aktualisiert, die Nachfahren des Kontext-Node sind. Um einen untergeordneten Node aus gleichrangigen Elementen zu aktualisieren, muss ein absoluter Locator-Pfad verwendet werden. Eine ausführliche Beschreibung dazu finden Sie im Folgenden.

 

Beachten Sie in der Abbildung unten, dass der (im Feld Kontext angegebene) Kontext-Node das Element Row der DB ist. Der Kontext-Node ist der Node, in dem sich das Steuerelement (für das die Aktion definiert wird, bzw. mit dem das Steuerelement verknüpft ist) befindet.
Das Attribut @Updated, das aktualisiert wird, ist somit das Attribut @Updated dieses Row-Elements. Das bedeutet, dass bei Auslösung eines Steuerelementereignisses eines Row-Elements nur das @Updated-Attribut dieses Row-Elements aktualisiert wird (in diesem Fall mit dem aktuellen Datum).

Click to expand/collapse

Würde der XPath-Ausdruck geändert, sodass der @Updated-Node ab dem Root-Node adressiert würde (wie in der Abbildung unten folgendermaßen: $DB2/DB/RowSet/Row/@Updated), so würden die @Updated-Nodes aller Row-Elemente aktualisiert.

Click to expand/collapse

In der Abbildung oben sehen Sie, dass Sie mittels XPath-Ausdrücken Zugriff auf alle Nodes aller Seitenquellen haben.

 

Referenzieren des angegebenen Ziel-Node mittels $MT_TargetNode

Nachdem ein Ziel-Node für die Aktualisierung definiert wurde, können Sie diesen Node mit der Variablen $MT_TargetNode referenzieren. Z.B.:
 
Update Node : @Updated

Update Value: concat(current-date-no-TZ(), '-ID-', $MT_TargetNode/../@id)

 

Das Resultat dieses Ausdrucks wäre ein aktualisierter Wert, bei dem der Wert des Attributs @id des aktuellen Row-Elements wie in der Abbildung unten an das aktuelle Datum angehängt würde.

MTDUpdateNodeXP03

Wenn nun die Aktualisierungs-Nodes die @Updated-Attribute aller Row-Elemente wären und wenn der XPath-Ausdruck für den Aktualisierungswert genauso wie im vorherigen Beispiel lauten würde:
 
Update Node : $DB2/DB/RowSet/Row/@Updated
Update Value: concat(current-date-no-TZ(), '-ID-', $MT_TargetNode/../@id)

 

so hätten die @Updated-Attribute der einzelnen Row-Elemente einen Wert, der als Wert des Attributs @id seines jeweiligen Row-Elements an das aktuelle Datum angehängt würde.

 

Ändern und Aktualisieren von Nodes mit Hilfe von $MT_TargetNode

Die Variable $MT_TargetNode erweist sich als nützlich, um Nodes in einer einzigen Aktion zu ändern und zu aktualisieren. In der Abbildung unten sehen Sie ein Beispiel dafür.

MTDUpdateNodeMTTargetNode

Die Aktion in der Abbildung funktioniert folgendermaßen:

 

Bei den zu aktualisierenden Nodes handelt es sich um alle Attribute des aktuellen Elements. Diese Nodes werden durch den XPath-Ausdruck Node(s) aktualisieren: @* definiert.
Die verarbeiteten Attribute werden der Reihe nach zum Inhalt von $MT_TargetNode
In der Ergebniseinstellung wird der aktualisierte Wert des Node definiert. In diesem Beispiel ist dies der ursprüngliche Wert des (mittels $MT_TargetNode) abgerufenen Attributs, aus dem die vorangestellten und nachgestellten Leerzeichen mit Hilfe der Funktion trim-string entfernt wurden.
Das Ergebnis ist, dass allen vorangestellten und nachgestellten Leerzeichen in jedem einzelnen Attribut entfernt wurden.

 

Quellelemente mit gemischtem Inhalt

Wenn das Ergebnis eines XPath Locator-Ausdrucks ein Element mit gemischtem Inhalt (Text und Element/e) ist, so wird nur der Textinhalt des gemischten Elements zurückgegeben. Der Textinhalt der untergeordneten Elemente wird ignoriert.

 

Am besten lässt sich dies anhand eines Beispiels für die Aktion "Node(s) aktualisieren" erklären. Angenommen, Sie verwenden die in der Abbildung unten definierte Aktion "Node(s) aktualisieren".

XPathMixedElementNonCompliance

Wenn die XML-Struktur die folgende Struktur und den folgenden Inhalt hätte:

 

<Element1>

   <source>AAA

      <subsource>BBB</subsource>

  </source>

  <target></target>

</Element1>

 

dann würde das target-Element mit dem Textinhalt des Elements mit gemischtem Inhalt des Namens source aktualisiert, während der Inhalt seines Child-Elements subsource ignoriert würde. Der Node mit dem Namen target wird zu <target>AAA</targetaktualisiert.

 

Anmerkung:Wenn Sie möchten, dass der Textinhalt untergeordneter Nodes inkludiert werden soll, verwenden Sie eine string-Funktion. Für das XML-Beispiel oben, wäre das Ergebnis des Ausdrucks string($XML1/Element1/source, '') z.B. "AAABBB".

 

Anmerkung:In Diagrammen wird die XPath-kompatible Methode der Serialisierung verwendet: Wenn das Ergebnis eines XPath Locator-Ausdrucks ein Element mit gemischtem Inhalt ist, so wird auch der Textinhalt von untergeordneten Elementen serialisiert.

 

Aktualisieren mehrerer Nodes mit Hilfe von XPath Arrays

Sie können mehrere Nodes (die Ziel-Nodes) durch Adressieren dieser Nodes mit Hilfe eines XPath Array aktualisieren. Auch die Aktualisierungswerte müssen als ein Array, das dieselbe Größe wie das Ziel-Node-Array hat, übergeben werden. Die Aktualisierung erfolgt 1:1 und pro Mitglied des Array: das erste Mitglied des Werte-Array aktualisiert das erste Mitglied des Ziel-Array, usw., z.B.:

 

Update Node : $XML1/User/Message/[@subject, @date, @senderID]
Update Value: ['Monthly Meeting June', '2018-05-31', 3485]

 

Beachten Sie die folgenden Punkte:

 

Die Variable $MT_TargetNode ist auf das Array gesetzt, das die Ziel-Nodes identifiziert. Sie können folgendermaßen überprüfen, ob die Variable ein Array enthält: if($MT_TargetNode instance of array(*)) then...
Zuerst wird die Auswertung und das Mapping der Arrays durchgeführt; anschließend werden die Zuordnungen als Gruppe ausgeführt, d.h. der Wert eines Ziel-Node kann als Input verwendet werden.
Jedes Mitglied des Ziel-Array wird separat behandelt. Selbst, wenn ein Mitglied des Ziel-Array einen Fehler verursacht (entweder durch das Mitglied selbst verursacht oder der Fehler entsteht bei der Auswertung des Werts), wird daher die Aktualisierung der anderen Ziel-Nodes fortgesetzt, jedoch werden entsprechende Fehlermeldungen generiert.

 

 


© 2019 Altova GmbH