Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 12h22   #1
Futur Membre du Club
 
Homme
Responsable de projet fonctionnel
Inscription : mars 2006
Messages : 41
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Responsable de projet fonctionnel
Secteur : Distribution

Informations forums :
Inscription : mars 2006
Messages : 41
Points : 15
Points : 15
Par défaut utilisation de XMLType

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
Dave Lopeur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 14h56   #2
Futur Membre du Club
 
Homme
Responsable de projet fonctionnel
Inscription : mars 2006
Messages : 41
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Responsable de projet fonctionnel
Secteur : Distribution

Informations forums :
Inscription : mars 2006
Messages : 41
Points : 15
Points : 15
J'y suis parvenu à force de tentative et de recherche sur Google :

Code :
1
2
3
4
5
6
7
8
 
SELECT EXTRACTVALUE(P.COLUMN_VALUE,'/B/NIVEAU') RACINE,
       EXTRACTVALUE(P.COLUMN_VALUE,'/B/NO_NIVEAU') no_racine
   FROM PARSE_XML W, 
   TABLE(XMLSEQUENCE(EXTRACT(XML_DOCUMENT, '/HEADER/A/*'))) P
WHERE W.FILENAME = 'monFichier.xml'
AND EXISTSNODE(VALUE(P),'/B[NO_NIVEAU="001"]') = 1
AND EXISTSNODE(VALUE(P),'/B[NIVEAU="RACINE"]') = 1;
Dave Lopeur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h35.


 
 
 
 
Partenaires

Hébergement Web