BOnjour a tous,
Je suis en train de creer un script en perl qui devrai me permettre de recuperer des données dans un XML.
Pour cela, j'ai lu le tuto suivant:
http://djibril.developpez.com/tutoriels/perl/perl-xml/
Et je me suis servi de l'exemple donné pour essayer de creer mon code.
J'arrive a faire la moitié de mon travail.
Je parviens bien a récupérer des données dans une partie de mon XML (les JOBS) mais pas dans l'autre (la SCHED_GROUP).
Mon but étant de récupérer les valeurs TABLE_NAME dans SCHED_GROUP et APPLICATION dans JOBS.
Voici mon XML de départ:
J'ai enlevé des parties du XML pour l'alléger.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 <?xml version='1.0' encoding='ISO-8859-1' ?> <!DOCTYPE DEFTABLE SYSTEM "deftable.dtd"> <DEFTABLE > <SCHED_GROUP OWNER="controlm" TABLE_NAME="P_ACA_ARGGREG_DODBIS" TABLE_USERDAILY="ACA" USED_BY_CODE="0"> <INCOND AND_OR="AND" NAME="CND_P_ACA_DENVOI-_CFTMEN_GGG_P_ACA_ARGGREG_DODBIS_GGG_OK" ODATE="ODAT" /> <OUTCOND NAME="CND_P_ACA_DENVOI-_CFTMEN_GGG_P_ACA_ARGGREG_DODBIS_GGG_OK" ODATE="ODAT" SIGN="DEL"/> <OUTCOND NAME="CND_P_ACA_ARGGREG_DODBIS_GGG_P_ACA_DEXTRAC_DODBIS_GGG_OK" ODATE="ODAT" SIGN="ADD"/> <TAG APR="1" TAG_NAME="ALLD" /> <TAG APR="1" TAG_NAME="P_ACA_ARGGREG_DODBIS" /> <JOB APPLICATION="PA_CADCASA_ACA" APR="1" AUG="1" AUTHOR="ut12m4" TASKTYPE="Command" USE_INSTREAM_JCL="0" > <QUANTITATIVE NAME="PRQ_ACA" QUANT="1" /> <OUTCOND NAME="CND_P_ACA_ARGGREG_DODBIS_010_P_ACA_ARGGREG_DODBIS_020_OK" ODATE="ODAT" SIGN="ADD" /> <AUTOEDIT EXP="%%SREP=/data/csabiexp/log/" /> <TAG_NAMES TAG_NAME="P_ACA_ARGGREG_DODBIS" /> <QUANTITATIVE NAME="PRQ_SUBMIT" QUANT="1" /> <ON CODE="NOTOK" STMT="*" > <DOSHOUT DEST="ECS" MESSAGE="[CTM_NTOK_%%COMPSTAT] [Réinitialisation Rapprochement DODGE/DODGEBIS]" URGENCY="V" /> </ON> <ON CODE="*" STMT="*" > <DOSYSOUT OPTION="Copy" PAR="%%SREP.%%MEMNAME..log" /> </ON> </JOB> <JOB APPLICATION="PA_CADCASA_ACA" APR="1" AUG="1" AUTHOR="ut12m4" TASKTYPE="Command" USE_INSTREAM_JCL="0" > <INCOND AND_OR="AND" NAME="CND_P_ACA_ARGGREG_DODBIS_010_P_ACA_ARGGREG_DODBIS_020_OK" ODATE="ODAT" /> <QUANTITATIVE NAME="PRQ_ACA" QUANT="1" /> <OUTCOND NAME="CND_P_ACA_ARGGREG_DODBIS_010_P_ACA_ARGGREG_DODBIS_020_OK" ODATE="ODAT" SIGN="DEL" /> <AUTOEDIT EXP="%%SREP=/data/csabiexp/log/" /> <TAG_NAMES TAG_NAME="P_ACA_ARGGREG_DODBIS" /> <QUANTITATIVE NAME="PRQ_SUBMIT" QUANT="1" /> <OUTCOND NAME="CND_P_ACA_ARGGREG_DODBIS_020_P_ACA_ARGGREG_DODBIS_030_OK" ODATE="ODAT" SIGN="ADD" /> <ON CODE="NOTOK" STMT="*" > <DOSHOUT DEST="ECS" MESSAGE="[CTM_NTOK_%%COMPSTAT] [Réinitialisation status imputation quotidienne]" URGENCY="V" /> </ON> <ON CODE="*" STMT="*" > <DOSYSOUT OPTION="Copy" PAR="%%SREP.%%MEMNAME..log" /> </ON> </JOB> <JOB APPLICATION="PA_CADCASA_ACA" APR="1" AUG="1" AUTHOR="ut16lq" TASKTYPE="Command" USE_INSTREAM_JCL="0" > <INCOND AND_OR="AND" NAME="CND_P_ACA_ARGGREG_DODBIS_020_P_ACA_ARGGREG_DODBIS_030_OK" ODATE="ODAT" /> <QUANTITATIVE NAME="PRQ_ACA" QUANT="1" /> <OUTCOND NAME="CND_P_ACA_ARGGREG_DODBIS_020_P_ACA_ARGGREG_DODBIS_030_OK" ODATE="ODAT" SIGN="DEL" /> <AUTOEDIT EXP="%%SREP=/data/csabiexp/log/" /> <TAG_NAMES TAG_NAME="P_ACA_ARGGREG_DODBIS" /> <QUANTITATIVE NAME="PRQ_SUBMIT" QUANT="1" /> <ON CODE="NOTOK" STMT="*" > <DOSHOUT DEST="ECS" MESSAGE="[CTM_NTOK_%%COMPSTAT] Backup de la base DODGE]" URGENCY="V" /> </ON> <ON CODE="*" STMT="*" > <DOSYSOUT OPTION="Copy" PAR="%%SREP.%%MEMNAME..log" /> </ON> </JOB> </SCHED_GROUP> </DEFTABLE>
Et voici mon code PERL:
Si vous pouviez m'indiquer une idée pour réussir a récupérer ce TABLE_NAME, je vous en serai reconnaissant.
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
41
42
43
44
45 #! /usr/bin/perl use strict; use warnings; use XML::Simple; my $parser = XML::Simple->new( KeepRoot => 1 ); # Creation du fichier resultat my $FichierResulat = 'résultat.txt'; open( my $FhResultat, '>', $FichierResulat ) or die("Impossible d'ouvrir le fichier $FichierResulat\n$!"); my $doc = $parser->XMLin('PDC_FR_HPX_P_ACA_ARGGREG_DODBIS.xml'); # Tout le fichier XML est dans $doc sous forme d'arbre foreach my $SCHED_GROUP ( %{ $doc->{DEFTABLE}->{SCHED_GROUP} } ) { if ( $SCHED_GROUP eq "TABLE_NAME" ) { print {$FhResultat} "ça marche a moitié"; } } #print {$FhResultat} my $SCHED_GROUP->{TABLE_NAME}; foreach my $JOB ( @{ $doc->{DEFTABLE}->{SCHED_GROUP}->{JOB} } ) { print {$FhResultat} "\n\nApplication : "; print {$FhResultat} $JOB->{APPLICATION}; print {$FhResultat} "\nAuthor : "; print {$FhResultat} $JOB->{AUTHOR}; print {$FhResultat} "\nChange userID : "; print {$FhResultat} $JOB->{CHANGE_USERID}; print {$FhResultat} "\nCommande line : "; print {$FhResultat} $JOB->{CMDLINE}; print {$FhResultat} "\nNode ID : "; print {$FhResultat} $JOB->{NODEID}; print {$FhResultat} "\nOwner : "; print {$FhResultat} $JOB->{OWNER}; } # Fermeture du fichier close($FhResultat);
Merci,
Cordialement,
Benjamin
Partager