Extraction de données d'un fichier XML
Bonjour,
Je dois extraire des données d'un fichier XML pour les intégrer dans ma base de données.
J'insère le fichier dans une colonne de type XMLTYPE d'une table de travail avec SQL*Loader.
Jusque là, j'ai réusssi à m'en sortir avec la structure de ce fichier mais là je sèche.
La structure du document qui me pose problème est la suivante :
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
| <Portefeuille>
<Client>
<Identifiant>345</Identifiant>
<Adresse>
<Type>PERS</Type>
<Ligne>18, rue du Chat Qui Pêche</Ligne>
<Ligne>Appt 21</Ligne>
<Ligne></Ligne>
<Ligne></Ligne>
<Ville>TRIFOUILLY</Ville>
<Adresse/>
<Adresse>
<Type>PRO</Type>
<Ligne>A.C.M.E</Ligne>
<Ligne>Direction Financière</Ligne>
<Ligne>20, rue Montgolfier</Ligne>
<Ligne></Ligne>
<Ville>AILLEURS Lez TRIFOUILLY</Ville>
<Adresse/>
</Client>
<Client>
....
</Client>
</Portefeuille> |
J'arrive bien à extraire les données du client et les composantes de l'adresse mais je bloque sur les lignes de l'adresse :
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
| insert into ADRESSE
select CLT.ID_CLIENT
, ADR.TYPE_ADRESSE
, ADR.VILLE
, listagg(LGN.LIGNE, CHR(10))
within group (order by LGN.ORDRE) as LIGNES
from XML_IMPORT SRC
, xmltable
( '/Portefeuille/Client' passing SRC.XML_DATA
columns
ID_CLIENT path '/Identifiant'
, ADRESSE xmltype path '/Adresse'
) CLT
, xmltable
( '/Adresse' passing CLT.ADRESSE
columns
TYPE_ADRESSE path '/Type'
, VILLE path '/Ville'
, LIGNES xmltype path '/Ligne'
) ADR
, xmltable
( '???' passing ADR.LIGNES
columns
LIGNE path '???'
, ORDRE path '???'
) LGN
where LGN.LIGNE is not null
group by CLT.ID_CLIENT
, ADR.TYPE_ADRESSE
, ADR.VILLE
; |
Quelqu'un serait-il plus à l'aise que moi pour manipuler les fichiers XML ?
Précision, je suis en 12.1.
PS: Inutile de me faire remarquer que le stockage de l'adresse dans la base n'est pas optimal. Je le sais et je me bats pour le modifier :evilred: