1 pièce(s) jointe(s)
Contrôle de structure d'un fichier XML reçu en utilisant la DTD
Bonjour,
Je suis en Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production et en train de développer une interface (Procédure PL/SQL) qui doit recevoir et charger des fichier XML dans la base de données.
Mon soucis c'est le contrôle des noms des noeuds dans le fichier qui peuvent être erronés. Je veux donc implémenter dans mon code une validation de la structure via une DTD, chose que je ne sais pas le faire.
Pourriez-vous m'aider SVP?
Qu'est ce que je dois rajouter dans mon code ci dessous?
Un exemple du fichier XML est attaché.
Grand merci.Pièce jointe 312623
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| Begin
v_bfile := BFileName(Repertoire, Fichier);
DBMS_LOB.createtemporary(v_clob, cache=>FALSE);
DBMS_LOB.open(v_bfile, DBMS_LOB.lob_readonly);
DBMS_LOB.loadFromFile(v_clob,v_bfile,DBMS_LOB.getLength(v_bfile));
DBMS_LOB.close(v_bfile);
DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT','''DD/MM/YYYY''');
-- Création d'un PARSER
v_parser := DBMS_XMLPARSER.newParser;
-- On parse le document et on crée un nouveau document DOM
DBMS_XMLPARSER.parseClob(v_parser, v_clob);
v_doc := DBMS_XMLPARSER.getDocument(v_parser);
-- On libére les ressources associées à v_clob et v_parser, comme nous n'en avons plus besoin
DBMS_LOB.freetemporary(v_clob);
DBMS_XMLPARSER.freeParser(v_parser);
-- liste des noeuds
v_nl := DBMS_XSLPROCESSOR.selectNodes(DBMS_XMLDOM.makeNode(v_doc),'/flux_financiers/flux_financier');
-- type record (1 item = 1 noeud de la liste v_nl)
FOR cur_auditeur IN 0..DBMS_XMLDOM.getLength (v_nl) - 1 LOOP
P_NBRE_LIGNES := P_NBRE_LIGNES + 1;
f_insert := 1; -- initialiser par defaut au mode insertion
lerreur := 'SRUCTURE INCORRECTE DU FICHIER:';
formule.date_create := sysdate;
chaine.date_create := formule.date_create;
-- on utilise la syntaxe XPATH pour affecter les valeurs des éléments
--
-- DEBUT DE LECTURE DU FICHIER XML
--
DBMS_XSLPROCESSOR.valueOf( DBMS_XMLDOM.item(v_nl, cur_auditeur) ,'Identification_ligne/code_ligne/text()', chaine.code_ligne); -- varchar2(50)
--
DBMS_XSLPROCESSOR.valueOf( DBMS_XMLDOM.item(v_nl, cur_auditeur) ,'Identification_agence/code_banque/text()',chaine.code_banque); -- varchar2(3)
..............
Exception when others then
P_NMES:=sqlcode;
verreur := Sqlerrm;
P_LMES:=verreur;
DBMS_XMLDOM.freeDocument(v_doc);
END; |