XML::Simple, Suppression de balises dans le fichier source
Bonjour, :help:
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
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 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| ...
|
]
... |
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.
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 :oops: , je ne maitrise pas encore assez les tables de hashages :(
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 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); |
Merci beaucoup pour votre aide.
CC