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 :
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 :
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 :
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 :
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