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('$result'
PASSING XMLPARSE(
DOCUMENT
SYSTOOLS.HTTPGETCLOB('http://adresse-de-mon-service?articleCode=57720020&companyCode=K','')
) as "result"
COLUMNS
Dnc CHAR(10) PATH 'hasdnc'
) 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 : 2200M Code fournisseur : -16168 Message : [SQ16168] Déclaration XML non valide dans le document XML. Cause . . . . . : 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 : 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 . . . : 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('$result'
PASSING XMLPARSE(
DOCUMENT
cast(SYSTOOLS.HTTPGETCLOB('http://adresse-de-mon-service?articleCode=57720020&companyCode=K','') as clob(1M) ccsid 1208 )
) as "result"
COLUMNS
Dnc CHAR(10) PATH 'hasdnc'
) 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