Echec de l'analyse syntaxique XML

configuration Apache, Zend et PHP , Web services
Répondre
florian67
Messages : 135
Enregistré le : lun. 23 déc. 2013, 17:03:12

Echec de l'analyse syntaxique XML

Message 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

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

XMLTABLE

Message 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 ?
Christian Massé (Volubis.fr)

florian67
Messages : 135
Enregistré le : lun. 23 déc. 2013, 17:03:12

Message 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

nbonnet
Messages : 198
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Message 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
Nathanaël

florian67
Messages : 135
Enregistré le : lun. 23 déc. 2013, 17:03:12

Message 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

florian67
Messages : 135
Enregistré le : lun. 23 déc. 2013, 17:03:12

(sujet inconnu)

Message 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

Répondre