[RESOLU][Oracle - SQL] Problème parsing xml

Problème parsing xml [RESOLU][Oracle - SQL] - SQL/NoSQL - Programmation

Marsh Posté le 15-01-2008 à 14:34:56    

Bonjour,  
 
J'ai un souci avec un bout de code:
 

Code :
  1. CREATE OR REPLACE PROCEDURE P_recup
  2. IS
  3. url VARCHAR2(400);
  4. wa_xmldiagnostic xmldom.domdocument;
  5. BEGIN
  6. url:='monadresse.fr';
  7. xml_http.get(url,wa_xmldiagnostic);
  8. END;


Quand j'execute ce code j'ai un message d'erreur:

Code :
  1. ORA-31011: Echec d'analyse XML
  2. ORA-19202    : Une erreur s'est produite lors du traitement la fonction XML (
  3. LPX-00200    : conversion impossible de l'encodage UTF-8 en UCS2
  4.               Error at line 1
  5.               )
  6. ORA-06512    : à "XDB.DBMS_XMLPARSER", ligne 156
  7. ORA-06512    : à "SOC1.XML", ligne 34
  8. ORA-06512    : à "SOC1.XML_HTTP", ligne 10
  9. ORA-06512    : à "SOC1.XML_HTTP", ligne 51
  10. ORA-06512    : à "SOC1.P_recup", ligne 37
  11. ORA-06512    : à ligne 12


L'execution plante dans les packages xml et je ne sais pas pourquoi (apparemment dés qu'il fait un parseBuffer).
Voici le fichier xml au cas où (sachant qu'il m'est impossible de le modifier):

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <result version="3.1" site="idsite" refid="Cmd-02" retour="trouvee" count="2">
  3. <transaction avancement="traitee" cid="952413554">
  4.  <detail>Absence des informations bancaires</detail>
  5.  <analyse>
  6.   <eval date="23/11/2007 10:21:18" critere="-1" validation="Risque faible" info="acheteur récent">-1</eval>
  7.   <classement id="15">Transactions traitées/Validées/Automatiquement</classement>
  8.  </analyse>
  9. </transaction>
  10. <transaction avancement="traitee" cid="95299164">
  11.  <detail>Absence des informations bancaires</detail>
  12.  <analyse>
  13.   <eval date="23/11/2007 10:19:34" critere="-1" validation="Risque faible" info="nouvel acheteur">-1</eval>
  14.  </analyse>
  15. </transaction>
  16. </result>


Message édité par bertrand484 le 16-01-2008 à 14:35:41
Reply

Marsh Posté le 15-01-2008 à 14:34:56   

Reply

Marsh Posté le 15-01-2008 à 16:00:47    

d'après la source de ton fichier XML, il est en ISO-8859-1 au lieu de UTF-8.
 
et d'après l'erreur, Oracle s'attends à lire de l'UTF-8, ce qui peut aisément expliquer l'erreur.

Reply

Marsh Posté le 15-01-2008 à 16:19:04    

Merci pour ta réponse.
J'avais eu le même raisonnement que toi mais lorsque je passe mon fichier xml dans un varchar et que derrière je fait un xml.parse(fichier) cela fonctionne sans problème (xml.parse est une fonction qui utilise exactement les même fonctions des packages xml que l'autre méthode sauf que de passer par l'url je lui passe directement le fichier en varchar)

Reply

Marsh Posté le 15-01-2008 à 16:33:38    

à la différence près que lorsque tu stockes dans ton varchar, le charset est adapté, et surtout, lorsque le package relis ton varchar, il connait le charset utilisé, certainement du ISO-8859-15 justement.
 
à mon avis, soit Oracle part du principe qu'une URI se doit de servir de l'UTF-8 uniquement, soit ton serveur web envoie en entête HTTP le charset UTF-8, et Oracle ne respecte pas le protocole, à savoir que le charset stipulé dans le fichier XML est censé primer sur celui utilisé pour le protocole de transport.

Reply

Marsh Posté le 16-01-2008 à 12:08:31    

Merci de m'avoir éclairé sur mon problème.
 
J'ai changé de méthode et maintenant ça fonctionne parfaitement.
Je mets mon bout de code au cas où ça peut aider d'autres personnes.

Code :
  1. CREATE OR REPLACE FUNCTION f_demandereponse () RETURN xmldom.domdocument
  2. IS--------------------------
  3. -- Déclarations variables.
  4. --------------------------
  5.    wa_xmldiagnostic   xmldom.domdocument;
  6.    webpageurl           HTTPURITYPE;
  7.    webpage              CLOB;
  8.    xmldocument        xmldom.domdocument;
  9. BEGIN
  10.      --Creation de l'url pour récupérer le flux xml
  11.    webpageurl :=
  12.       HTTPURITYPE.createuri
  13.          ('http://monadresse.fr);
  14.    --Récupérer le flux XML par HTTP
  15.    webpage := webpageurl.getclob ();
  16.    -- Parsing du fichier XML
  17.    wa_xmldiagnostic := xml.parse (webpage);
  18.    RETURN wa_xmldiagnostic;
  19. END;


 
Comment on fait pour fermer le post?


Message édité par bertrand484 le 16-01-2008 à 12:13:57
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed