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 :
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
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>
Puis je voudrais récupérer le NO_NIVEAU des FEUILLE appartenant à la BRANCHE 011 qui appartient elle-même à la RACINE 001.
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')));
Pour cela j'ai fais ça :
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
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;
Comment faire pour avoir ce que je veux?
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>
Merci d'avance
Partager