[SQL] fonction inverse de XMLTEXT

RPG (3 et 4, free), CL, SQL, etc...
Répondre
thomas.barberot
Messages : 56
Enregistré le : jeu. 12 avr. 2012, 14:50:53

[SQL] fonction inverse de XMLTEXT

Message par thomas.barberot »

Bonjour.

La fonction SQL XMLTEXT permet de générer une chaîne contenant des caractères XML échappés :

Code : Tout sélectionner

values XMLTEXT('100 est > à 99 & à 98');
donne comme résultat
100 est > à 99 & à 98
Mais je n'arrive pas à faire l'inverse : remplacer les caractères échappés par les balises.
Je reçois un flux XML contenant un élément CDATA qui contient un flux XML échappé (du XML dans du XML). Dans un RPGLE, je cherche à parser ce flux échappé pour le mettre dans une DS (avec xml-into). Mais j'ai besoin de "déséchapper" le champ XML avant de faire cette opération (je n'ai pas trouvé d'options permettant de gérer les caractères échappés dans xml-into).
y'a-t'il une fonction (SQL ou RPG) plus simple qu'un %scanrpl en RPG ?
Merci.
Thomas

cmasse
Site Admin
Messages : 791
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

Re: [SQL] fonction inverse de XMLTEXT

Message par cmasse »

pas que je sache, hélas !
Christian Massé (Volubis.fr)

vazymimil
Messages : 20
Enregistré le : ven. 28 sept. 2018, 17:14:46

Re: [SQL] fonction inverse de XMLTEXT

Message par vazymimil »

Bonjour,

Si j'ai bien compris vous avez un fragment xml échappé dans un CDATA (qui pourtant sert à éviter d'échapper son contenu), lui même dans un document xml.

xml-into peut faire ce que vous voulez, vous extrayez d'abord le contenu du CDATA, échappé donc, avec xml-into puis vous repassez ce contenu obenu dans xml-into comme suit, là vous devriez obtenir le xml attendu

Code : Tout sélectionner

dcl-ds v qualified;
  xml varchar(20000);
end-ds;
xml-into v %xml('<v>' + xml_echappe + '</v>':'path=v datasubf=xml')
Nicolas

thomas.barberot
Messages : 56
Enregistré le : jeu. 12 avr. 2012, 14:50:53

Re: [SQL] fonction inverse de XMLTEXT

Message par thomas.barberot »

Bonjour.

Oui, le xml-into gère très bien cela tout seul, c'est le postulat de mon test qui a été mal posé.
En effet, j'avais converti la totalité du flux xml (< en &lt; et > en &gt;), alors que ce n'est jamais comme cela qu'il est envoyé. La portion de XML échappée est envoyée dans un élément d'un flux XML "classique", ce n'est pas la totalité du flux.
Au moment du XML-INTO, le contenu de l'élément échappé est remis en forme automatiquement dans le champ correspondant de la DS réceptrice, et il suffit ensuite de refaire un XML-INTO dessus.
D'ailleurs, pour un CDATA, il fonctionne de la même manière de façon totalement transparente.

Problème mal posé, perte de temps.

Merci pour vos réponses.
Thomas

Répondre