3 votes

XSL : Comment changer l'attribut X lorsque l'attribut Y est 'A', 'B' ou 'F' ?

Je travaille avec des demandes XML dans lesquelles je dois changer la valeur d'attribut d'un élément si une autre valeur d'attribut est égale à une ou plusieurs valeurs. XPath ne peut pas mettre à jour le XML lui-même (si je comprends bien) et j'ai regardé XSL mais c'est assez compliqué et je ne travaille généralement pas en XML.

Voici une version simplifiée du XML avec lequel je travaille :

Je dois changer l'action de ADD_NEW à UPDATE_OLD dans le bloc Mappings si le type est égal à PLANE ou CAR.

Je regarde les autres exemples d'XSL des gens et j'essaie de comprendre comment commencer mais je n'y arrive pas. L'outil que j'utilise prend en charge XSL et a un logiciel personnalisé où je peux ajouter un modèle XSL et il l'appliquera au message XML que je spécifie.

Mais je ne suis pas sûr de par où commencer - au risque de sembler dire, "S'il vous plaît, faites mon travail à ma place, utilisateurs de SO", si quelqu'un pouvait me donner au moins un point de départ de comment pointer d'abord vers ma structure puis comment changer une valeur SI x = y.

Merci à tous.

3voto

FelHa Points 375

Si vous voulez uniquement modifier cet attribut particulier, vous pouvez opter pour une transformation d'identité et gérer @action avec un modèle :

3voto

Tomalak Points 150423

L'idée derrière XSLT est de parcourir l'arborescence XML d'entrée et de produire un nouveau contenu à partir des nœuds XML.

Dans sa forme la plus fondamentale, cela se fait en utilisant la correspondance de modèles.

  • écrire des modèles qui correspondent à certains nœuds en fonction d'une condition, et
  • écrire du code qui applique les modèles aux nœuds (lectures connexes).

Le modèle le plus basique est le modèle d'identité.

C'est très peu spécifique ; il peut correspondre à n'importe quel nœud et se contente d'appeler récursivement lui-même, en copiant tout ce qu'il trouve. Cela produit un document de sortie identique à l'entrée, d'où le nom.

Cela devient plus intéressant lorsque vous ajoutez des modèles plus spécifiques, car XSLT choisira un modèle mieux adapté à la place d'un modèle moins spécifique.

Comme celui-ci, qui correspond spécifiquement uniquement aux attributs @action appartenant à un élément ayant l'attribut @type PLANE ou CAR. Au lieu de copier, il crée un nouvel nœud attribut avec le même nom mais une valeur différente.

">
  ADD_OLD

Ces deux modèles ensemble accomplissent ce que vous voulez. Le modèle générique copie tout tel quel, sauf si un modèle plus spécifique correspond à un certain nœud.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X