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.exemple_xml.txt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;