Bonjour,

j'utilise XMLType pour traiter les données d'un fichier XML dans un package PL/SQL. Cependant je ne parviens pas à faire ce que je veux.
En gros, j'ai un fichier XML de ce type :

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
<HEADER>
  <A>
    <B>
      <NIVEAU>RACINE</NIVEAU>
      <NO_NIVEAU>001</NO_NIVEAU>
      <NIVEAU_PARENT></NIVEAU_PARENT>
      <NO_NIVEAU_PARENT></NO_NIVEAU_PARENT>
    </B>
    <B>
      <NIVEAU>RACINE</NIVEAU>
      <NO_NIVEAU>002</NO_NIVEAU>
      <NIVEAU_PARENT></NIVEAU_PARENT>
      <NO_NIVEAU_PARENT></NO_NIVEAU_PARENT>
    </B>
    <B>
      <NIVEAU>BRANCHE</NIVEAU>
      <NO_NIVEAU>011</NO_NIVEAU>
      <NIVEAU_PARENT>RACINE</NIVEAU_PARENT>
      <NO_NIVEAU_PARENT>001</NO_NIVEAU_PARENT>
    </B>
    <B>
      <NIVEAU>BRANCHE</NIVEAU>
      <NO_NIVEAU>021</NO_NIVEAU>
      <NIVEAU_PARENT>RACINE</NIVEAU_PARENT>
      <NO_NIVEAU_PARENT>001</NO_NIVEAU_PARENT>
    </B>
    <B>
      <NIVEAU>FEUILLE</NIVEAU>
      <NO_NIVEAU>111</NO_NIVEAU>
      <NIVEAU_PARENT>BRANCHE</NIVEAU_PARENT>
      <NO_NIVEAU_PARENT>011</NO_NIVEAU_PARENT>
    </B>
    <B>
      <NIVEAU>FEUILLE</NIVEAU>
      <NO_NIVEAU>211</NO_NIVEAU>
      <NIVEAU_PARENT>BRANCHE</NIVEAU_PARENT>
      <NO_NIVEAU_PARENT>021</NO_NIVEAU_PARENT>
    </B>
  </A>
</HEADER>
J'insère donc mes données dans une table pour pouvoir les traiter ensuite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
INSERT INTO parse_xml (filename, xml_document)
         VALUES ('monFichier.xml',
                 XMLTYPE(BFILENAME(P_REP_FIC, 'monFichier.xml'), NLS_CHARSET_ID('AL32UTF8')));
Puis je voudrais récupérer le NO_NIVEAU des FEUILLE appartenant à la BRANCHE 011 qui appartient elle-même à la RACINE 001.

Pour cela j'ai fais ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
SELECT EXTRACT(XML_DOCUMENT, '/HEADER/A/B/NIVEAU').GETSTRINGVAL() AS NIVEAU,
       EXTRACT(XML_DOCUMENT, '/HEADER/A/B/NO_NIVEAU').GETSTRINGVAL() AS NO_NIVEAU
FROM PARSE_XML
WHERE FILENAME = 'monFichier.xml'
AND EXISTSNODE(XML_DOCUMENT,'/HEADER/A/B[NO_NIVEAU="001"]') = 1
AND EXISTSNODE(XML_DOCUMENT,'/HEADER/A/B[NIVEAU="RACINE"]') = 1;
Afin de déjà récupérer la RACINE est son niveau si elle existe et prévois de réitérer l'opération sur les différents niveaux mais la requête me retourne tous les niveaux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
NIVEAU : <NIVEAU>RACINE</NIVEAU><NIVEAU>RACINE</NIVEAU><NIVEAU>BRANCHE</NIVEAU><NIVEAU>BRANCHE</NIVEAU><NIVEAU>FEUILLE</NIVEAU><NIVEAU>FEUILLE</NIVEAU>
 
NO_NIVEAU :
<NO_NIVEAU>001</NO_NIVEAU><NO_NIVEAU>002</NO_NIVEAU><NO_NIVEAU>011</NO_NIVEAU><NO_NIVEAU>021</NO_NIVEAU><NO_NIVEAU>111</NO_NIVEAU><NO_NIVEAU>211</NO_NIVEAU>
Comment faire pour avoir ce que je veux?

Merci d'avance