Mettre à jour un nœud

www.altova.com Imprimer cette rubrique Page précédente Un niveau supérieur Page suivante

Accueil >  Actions > Mettre à jour les données >

Mettre à jour un nœud

L'action Mettre à jour un nœud met à jour un ou plusieurs nœuds spécifiés avec la valeur spécifiée. Le nœud de mise à jour et la valeur de mise à jour sont spécifiés avec des expressions XPath. Dans la capture d'écran ci-dessous, le nœud d'attribut @Updated de l'élément contextuel XPath est mis à jour avec la date actuelle (le résultat de l'évaluation de la fonction XPath current-date-no-TZ()).

MTDUpdateNode01

Certains aspects doivent être pris en considération lors de la spécification du nœud de mise à jour et de la valeur de mise à jour :

 

Importance du nœud contextuel pour les chemins relatifs. (Voir ci-dessous pour plus de détails)
Le nœud cible pour la mise à jour peut être référencé avec la variable $MT_TargetNode. (Voir ci-dessous pour plus de détails)
Si le nœud source est un élément à contenu mixte (texte et éléments), alors seul le contenu de texte de l'élément à contenu mixte est utilisé pour la mise à jour. Le contenu de texte des éléments descendants est ignoré. (Voir ci-dessous pour plus de détails).
Plusieurs nœuds cibles peuvent être spécifiés avec un array. (Voir ci-dessous pour plus de détails)

 

Importance du nœud contextuel pour les chemins relatifs

Si le nœud à mettre à jour est spécifié en tant que chemin relatif, alors seuls les nœuds qui sont descendants du nœud contextuel seront mis à jour. Pour mettre à jour un nœud descendant des éléments frères, il faudra utiliser un chemin de localisation absolu. Vous trouverez plus d'informations à ce sujet ci-dessous.

 

Dans la capture d'écran ci-dessous, veuillez noter que le nœud contextuel (indiqué dans le champ Contexte) est l'élément Row de la BD. Le nœud contextuel est le nœud au sein duquel la commande (pour laquelle l'action est définie) est localisée (ou avec laquelle la commande est associée).
L'attribut @Updated qui sera mis à jour est donc l'attribut @Updated de cet élément Row particulier. Cela signifie que lorsqu'un événement de commande de l'élément Row est déclenché, seul l'attribut @Updated de cet élément Row est mis à jour, dans ce cas avec la date actuelle.

Click to expand/collapse

Si l'expression XPath avait été modifiée de manière à adresser le nœud @Updated en commençant à partir du nœud racine (comme dans l'exemple suivant et comme dans la capture d'écran ci-dessous : $DB2/DB/RowSet/Row/@Updated), alors le nœud @Updated de tous les éléments Row serait mis à jour.

Click to expand/collapse

Veuillez noter à l'aide de la capture d'écran ci-dessus, que vous avez accès à tous les nœuds de toutes les sources de page par le biais des expressions XPath.

 

Référencer le nœud cible spécifié avec $MT_TargetNode

Après avoir défini un nœud cible pour la mise à jour, vous pouvez référencer ce nœud avec la variable $MT_TargetNode. Par exemple :
 
Update Node : @Updated
Update Value: concat(current-date-no-TZ(), '-ID-', $MT_TargetNode/../@id)

 

donnerait une valeur de mise à jour dont la valeur d'attribut @id de l'élément actuel Row serait mise en suffixe de la date actuelle, comme dans la capture d'écran ci-dessous.

MTDUpdateNodeXP03

Si les nœuds de mise à jour étaient les attributs @Updated de tous les éléments Row, et que l'expression XPath pour la valeur de mise à jour était la même que dans l'exemple précédent :
 
Update Node : $DB2/DB/RowSet/Row/@Updated
Update Value: concat(current-date-no-TZ(), '-ID-', $MT_TargetNode/../@id)

 

alors l'attribut @Updated de chaque élément Row aurait une valeur qui aurait la valeur d'attribut @id de son propre élément Row mis en suffixe de la date actuelle.

 

Modifier et mettre à jour les nœuds avec $MT_TargetNode

La variable $MT_TargetNode peut être très utile si vous souhaitez modifier et mettre à jour des nœuds dans une action commune. Un exemple est affiché dans la capture d'écran ci-dessous.

MTDUpdateNodeMTTargetNode

L'action montrée dans la capture d'écran fonctionne comme suit :

 

Les nœuds à mettre à jour sont tous les attributs de l'élément actuel. Ces nœuds sont spécifiés par l'expression XPath de Mettre à jour nœud(s): @*s
Alors que chaque attribut est traité, il devient le sujet de $MT_TargetNode
Le paramètre Result spécifie la valeur de mise à jour du nœud, qui, dans l'exemple ci-dessus, est la valeur originale de l'attribut (obtenu via $MT_TargetNode), est modifié : les espaces de début et de fin sont supprimés avec la fonction XPath trim-string.
Le résultat général est que les espaces de début et de fin de chaque attribut sont supprimés

 

Éléments source à contenu mixte

Si un élément à contenu mixte (texte et élément/s) est localisé avec une expression de localisation XPath, alors seul le contenu de texte de l'élément de contenu mixte est retourné. Le contenu de texte des éléments descendants est ignoré.

 

Cette opération peut être expliquée à l'aide d'un exemple de l'action Mise à jour du/des nœud(s). Veuillez consulter l'action Mise à jour du/des nœud(s) définie dans la capture d'écran ci-dessous.

XPathMixedElementNonCompliance

Si l'arborescence XML avait la structure et le contenu suivants :

 

<Element1>

   <source>AAA

      <subsource>BBB</subsource>

  </source>

  <target></target>

</Element1>

 

Alors l'élément cible serait mis à jour avec le contenu de texte de l'élément source à contenu mixte, tout en ignorant le contenu de son élément enfant subsource. Le nœud nommé target serait mis à jour sous <target>AAA</target>.

 

Note :Si vous souhaitez inclure le contenu de texte du/des nœud/s descendant/s, utilisez une fonction string. En utilisant l'exemple XML ci-dessus par exemple, l'expression string($XML1/Element1/source, '') retournera "AAABBB".

 

Note :Les graphiques utilisent la méthode compatible au XPath de la sérialisation : lorsqu'un élément à contenu mixte est localisé en utilisant une expression de localisation XPath, le contenu de texte des éléments descendants est également sérialisé.

 

Mettre à jour plusieurs nœuds par le biais de tableaux XPath

Vous pouvez mettre à jour plusieurs nœuds (les nœuds cibles) en localisant ces nœuds par le biais d'un tableau XPath. Les valeurs de mise à jour doivent aussi être soumises en tant qu'array, un array qui a la même taille que l'array de nœud de cible. La mise à jour s'effectue 1:1 et membre par membre : le premier membre du array de valeur met à jour le premier membre de l'array cible, etc. Par exemple :

 

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

 

Veuillez noter les points suivants :

 

La variable $MT_TargetNode est définie dans l'array qui identifie les nœuds de cible. Vous pouvez contrôler si la variable contient un array comme suit : if($MT_TargetNode instance of array(*)) then...  
L'évaluation et le mappage des arrays sont effectués en premier ; les assignations sont exécutées par la suite en tant que groupe. Cela signifie que la valeur d'un nœud cible peut être utilisée en tant qu'entrée.
Chaque membre de l'array de cible est géré séparément. En résultat, même si un membre de l'array de cible produit une erreur (soit lui-même soit quand sa valeur a été évaluée), les mises à jour d'autres nœuds de cible continueront. Toutefois, des messages d'erreur appropriés seront générés.

 


© 2019 Altova GmbH