Bonjour,
Je souhaite à partir d'un fichier xml source contenant de nombreuses balises, en supprimer certaines en fonction de leur contenu...
Je m'explique :
Voici une petite partie de la structure du mon fichier xml source que j'ai récupéré via le module xml::simple
L'entête xml de mon fichier destination ne changera pas, jusqu'aux nombreuses balise <RESULT>, en effet, en fonction du contenu d'un élément présent dans une balise <RESULT>, je souhaite supprimer l'ensemble du contenu de la balise.
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 $VAR1 = { 'BODY' => { 'SLU' => { 'TOTO' => { 'XXXX' => 'xx' }, 'LIST' => { 'RESULT' => [ { | 'AAAAA' => {}, | | 'BBBBB' => { | '11111' => '00:00', | '22222' => { | 'BB' => 'bb', | 'BBB' => 'bbb' | }, | }, | | 'CCCCC' => { | '11111' => { | 'ddd' => { | 'ee' => '00', 'RESULT'1| 'ff' => {}, | }, | | 'eeee' => 'A/B', | 'fff' => {}, | } | | } | }, { | 'AAAAA' => {}, | 'BBBBB' => { | '11111' => '0000', 'RESULT'2| '22222' => { ... | | } | ... | ... | ... ... 'RESULT'x| ... | ] ...
Voici le code que j'ai commencé, j'arrive bien à interroger le contenu des sous balises présentes dans mes balises <RESULT>, mais je n'arrive pas à reconstruire un fichier xml avec la même structure.
N'ayez pas peur du code, je tente de m'améliorer, je ne maitrise pas encore assez les tables de hashages
Merci beaucoup pour votre aide.
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 use XML::Simple; use Data::Dumper; open(OUT,"> test.txt") or die("Impossible d'ouvrir test.txt\n"); @Tab = (); $xml = new XML::Simple; $ref = $xml->XMLin('test.xml'); foreach $value (@{$ref->{BODY}->{SLU}->{LIST}->{RESULT}}) { $BBBBB = $value->{BBBBB}; $CCCCC = $value->{CCCCC}; #SI OK, je souhaite conserver la structure ('AAAAA','BBBBB','CCCCC') #dans un mon futur fichier xml if (($BBBBB->{22222}->{BB} eq "bb") && (($CCCCC->{11111}->{eeee}) eq "A/B")) { push(@Tab,$value); } } #Reconstruction d'un fichier xml avec ce qui m'interesse $xml = new XML::Simple (NoAttr=>1, RootName=>'data'); $data = $xml->XMLout(\@Tab); print Dumper($data);
CC
Partager