Page 1 sur 1

Echec de l'analyse syntaxique XML

Posté : lun. 01 oct. 2018, 14:18:28
par florian67
Bonjour à tous,

J'ai une erreur syntaxique lors de la consommation d'un service Web que je ne m'explique pas.

Le service me retourne une simple chaîne : <hasdnc>true</hasdnc>

Ma requête HTTPGETCLOB est la suivante :

Code : Tout sélectionner

SELECT *
   FROM XMLTABLE&#40;'$result' 
      PASSING XMLPARSE&#40;
         DOCUMENT 
           SYSTOOLS.HTTPGETCLOB&#40;'http&#58;//adresse-de-mon-service?articleCode=57720020&companyCode=K',''&#41;
      &#41; as "result"
         COLUMNS 
            Dnc CHAR&#40;10&#41; PATH 'hasdnc'
   &#41; AS RESULT;
Est-ce que j'ai fait une erreur dans ma requête?

Merci d'avance.
Florian

XMLTABLE

Posté : lun. 01 oct. 2018, 15:13:49
par cmasse
Chez moi, ça marche avec ce code

SELECT *
FROM XMLTABLE('$result'
PASSING XMLPARSE(
DOCUMENT
'<hasdnc>true</hasdnc>'
) as "result"
COLUMNS
Dnc CHAR(10) PATH 'hasdnc'
) AS RESULT;

le service doit retourner qqchose de plus complexe, non ?

Posté : jeu. 04 oct. 2018, 08:42:11
par florian67
Pardon pour le retard je n'avais pas vu la répondre.

En fait j'ai remarqué qu'il retournait en plus <?xml version="1.0" encoding="UTF-8"?>

Vous pensez que ça pose problème?

Florian

Posté : ven. 05 oct. 2018, 16:11:46
par nbonnet
Bonjour Florian,

quel est ton message ?
Si c'est celui-ci :

Code : Tout sélectionner

Etat SQL &#58; 2200M Code fournisseur &#58; -16168 Message &#58; &#91;SQ16168&#93; Déclaration XML non valide dans le document XML. Cause . . . . . &#58; La déclaration XML dans le document XML ou le schéma XML est incorrecte. Il s'agit d'une erreur de type 7. Les types d'erreur sont &#58; 1 -- Marque d'ordre d'octet non prise en charge, ordre des chaînes de déclaration non admis, majuscules obligatoires dans la déclaration, chaîne 'version=' manquante, attributs non pris en charge indiqués. 6 -- Version indiquée non prise en charge. 7 -- Codage indiqué non pris en charge ou codage interne sans correspondance avec le codage externe. 8 -- Déclaration XML non terminée. Que faire . . . &#58; Corrigez le document XML. Renouvelez la demande. 
Alors cela provient de la non correspondance entre l'UTF-8 indiqué en entête XML et le codage réel de ta valeur


Essaie de convertir en UTF-8 (taille du CLOB à adapter) :

Code : Tout sélectionner

SELECT * 
   FROM XMLTABLE&#40;'$result' 
      PASSING XMLPARSE&#40; 
         DOCUMENT 
           cast&#40;SYSTOOLS.HTTPGETCLOB&#40;'http&#58;//adresse-de-mon-service?articleCode=57720020&companyCode=K',''&#41; as clob&#40;1M&#41; ccsid 1208 &#41;
      &#41; as "result" 
         COLUMNS 
            Dnc CHAR&#40;10&#41; PATH 'hasdnc' 
   &#41; AS RESULT;
Nathanaël

Posté : lun. 08 oct. 2018, 07:51:22
par florian67
Bonjour Christian, Nathanaël,

J'ai regardé un peu plus en détail et j'ai trouvé pourquoi ça met qu'il y a une erreur syntaxique.

J'ai utilisé HTTPGETCLOB mais sans faire de lecture (Exec SQL values ...).

Je reçois ça : <?xml version="1.0" encoding="utf-8"?><hasdnc>true</hasdnc>

Du coup je pense que ça vient des caractères "".

Vous pensez que c'est un problème lié au service ou plutôt un problème de conversion de caractère?

Bonne journée.
Florian

(sujet inconnu)

Posté : jeu. 03 janv. 2019, 15:14:37
par florian67
Bonjour à tous,

Je ne sais pas pourquoi j'ai voulu regarder ce problème maintenant mais j'ai trouvé la solution.

Ces caractères étranges ont une signification, c'est l'indicateur d'ordre des octets (BOM). Il est dit que parfois, si le logiciel est incompatible, il est possible qu'ils s'affichent.

J'ai donc remplacer le HTTPGETCLOB par le HTTPGETBLOB (pour ne pas faire de conversion) et tout fonctionne parfaitement bien.

Merci pour votre aide.
Florian