Bonjour A tous
je vais essayer d’être clair
j'ai le fichier XML suivant et j'essaye de traiter des infos qui ne sont pas sur le meme niveau hierarchique (ici le tag requestId avec les tags networkAccounId)
cat /tmp/Response.xml
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
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<batchNewResponse>
    <entry>
        <requestId>EN014383</requestId>
        <select>FixePhoneNumber,MobilePhoneNumber,EmailAdresse</select>
        <count>9</count>
        <nblines>7</nblines>
    </entry>
    <feed>
    <networkAccountId id="001234567">"+33025117528","",""</networkAccountId>
        <networkAccountId id="000123456">"","+33094063225","helene.dici@la.fr"</networkAccountId>
        <networkAccountId id="123456789">"+33098257276","",""</networkAccountId>
        <networkAccountId id="987654322">"","+33735633685","jossdela@gmal.com"</networkAccountId>
        <networkAccountId id="000001234">"+33000024957","",""</networkAccountId>
        <networkAccountId id="000897356">"+33783763117","+3246353440",""</networkAccountId>
        <networkAccountId id="8762543SD"></networkAccountId>
        <networkAccountId id="IdNo98376">"+33612600007","+33098235637",""</networkAccountId>
        <networkAccountId id="TestIdNo9">"","+33556736332",""</networkAccountId>
        <networkAccountId id="TestIdNo6"></networkAccountId>
    </feed>
</batchNewResponse>
et les 2 requêtes suivantes donne ce que je souhaite avoir , mais mon souci est de devoir faire 2 requêtes (donc 2 lectures du fichier XML)

(TMP_DIR est un directory ORACLE ==> Create Or Replace Directory TMP_DIR as '/tmp/')

cat Resp.sql
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
set pagesize 0
set heading off
Set linesize 400
select x.* from XMLTable( '/batchNewResponse/entry'
                          passing xmltype( bfilename('TMP_DIR','Response.xml'),nls_charset_id('Windows-1251') )
                          columns
                               no_file varchar2(300) path 'requestId'
                         ) x;
 
select x.* from XMLTable( '/batchNewResponse/feed/networkAccountId'
                          passing xmltype( bfilename('TMP_DIR','Response.xml'),nls_charset_id('Windows-1251') )
                          columns
                               id varchar2(10) path '@id',
                               info varchar2(300) path '.'
                         ) x;
le résultat attendu est ok mais mon problème est que je lis 2 fois le fichier
(Sous Sqlplus)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
@Resp.sql
EN014383
 
001234567  "+33025117528","",""
000123456  "","+33094063225","helene.dici@la.fr"
123456789  "+33098257276","",""
987654322  "","+33735633685","jossdela@gmal.com"
000001234  "+33000024957","",""
000897356  "+33783763117","+3246353440",""
8762543SD
IdNo98376  "+33612600007","+33098235637",""
TestIdNo9  "","+33556736332",""
TestIdNo6
Est il possible de faire une seule requete (Impliquant bien entendu 1 seule lecture du fichier) pour avoir le résultat suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
EN014383 001234567  "+33025117528","",""
EN014383 000123456  "","+33094063225","helene.dici@la.fr"
EN014383 123456789  "+33098257276","",""
EN014383 987654322  "","+33735633685","jossdela@gmal.com"
EN014383 000001234  "+33000024957","",""
EN014383 000897356  "+33783763117","+3246353440",""
EN014383 8762543SD
EN014383 IdNo98376  "+33612600007","+33098235637",""
EN014383 TestIdNo9  "","+33556736332",""
EN014383 TestIdNo6
Merci de votre aide
@Argoet