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:
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>
J'ai enlevé des parties du XML pour l'alléger.

Et voici mon code PERL:
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);
Si vous pouviez m'indiquer une idée pour réussir a récupérer ce TABLE_NAME, je vous en serai reconnaissant.
Merci,
Cordialement,
Benjamin