Perl - Ajout d'information d'un fichier XML dans un autre fichier XML
Bonjour je débute en PERL, j'ai cherché sur internet pendant plusieurs heures mais je n'arrive pas à faire ce que j'aimerais.
Contexte :
J'ai deux fichiers XML, dans un il y a les informations de plusieurs articles et dans l'autre le numéro de l'article avec différents prix. Ce que j'aimerais faire est de pouvoir ajouter le prix de l'article dans le premier fichier XML pour ensuite le convertir en CSV.
Voici le fichier avec un article :
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 54 55 56 57 58 59 60 61 62
| <items>
<item>
<LITM>664513</LITM>
<part_number>
<LITT>SRZU HPE 867810-B21</LITT>
<MITM>867810-B21</MITM>
<EITM>190017085289</EITM>
</part_number>
<part_description>
<DESC>HPE DL38X Gen10 High Performance Fan</DESC>
<DES2>passend zu HPE DL38X Gen10</DES2>
<MWLK>https://support.hpe.com/hpsc/doc/public/display?docId=emr_na-a00019685en_us&docLocale=en_US</MWLK>
<WTXT>HPE Ventilateur 867810-B21 DL38X Gen10 Kit de ventilateur de température haute performance</WTXT>
<WTX2/>
</part_description>
<additional_information>
<GWGH>1.11</GWGH>
<MAFT>Hewlett-Packard</MAFT>
<WAIM>36</WAIM>
<STDT>25.07.19</STDT>
<DEDT>unbekannt</DEDT>
<ENOS>Nein</ENOS>
<STQU>0</STQU>
</additional_information>
<part_catagory>
<CAT1>Réseau informatique</CAT1>
<CAT2>Serveur</CAT2>
<CAT3>Boîtier serveur</CAT3>
<CATA>Accessoires Boîtier de serveur</CATA>
</part_catagory>
</item>
<item>
<LITM>756881</LITM>
<part_number>
<LITT>HD GT E 0G06072</LITT>
<MITM>0G06072</MITM>
<EITM>705487206319</EITM>
</part_number>
<part_description>
<DESC>G-Tech Drive mobile USB 3.0, 2.5" 2TB</DESC>
<DES2>USB3.0, Silber</DES2>
<MWLK>https://www.g-technology.com/products/portable/g-drive-mobile#0G06071</MWLK>
<WTXT>G-Technology Disque dur externe G-DRIVE mobile 2 TO</WTXT>
<WTX2>Alimentation électrique: Câble de tranfert de données, Capacité de stockage: 2 TB, Cryptage du stockage des données: Keine, Couleur: Argenté, Système de fichiers: exFAT (Windows & Mac OS), Interfaces: USB 3.0</WTX2>
</part_description>
<additional_information>
<GWGH>0.30</GWGH>
<MAFT>G-Technology</MAFT>
<WAIM>36</WAIM>
<STDT>04.07.18</STDT>
<DEDT>sofort</DEDT>
<ENOS>Nein</ENOS>
<STQU>2</STQU>
</additional_information>
<part_catagory>
<CAT1>Matériel informatique</CAT1>
<CAT2>Périphérique informatique</CAT2>
<CAT3>Disque dur & SSD externe</CAT3>
<CATA>HDD externe</CATA>
</part_catagory>
</item>
</items> |
Et voici le fichier avec les prix :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <prices>
<item>
<LITM>664513</LITM>
<price>
<INPR>44.95</INPR>
<EXPR>41.74</EXPR>
<VATR>7.70</VATR>
<ECPR>50.00</ECPR>
</price>
</item>
<item>
<LITM>756881</LITM>
<price>
<INPR>413.00</INPR>
<EXPR>383.47</EXPR>
<VATR>7.70</VATR>
<ECPR>469.00</ECPR>
</price>
</item>
</prices> |
J'aimerais reprendre la balise <EXPR> du deuxième fichier et l'inclure dans le premier.
On m'a dit de travailler avec des tableaux donc voici mon code :
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
| #!/C:/Perl64/bin/perl.exe
use XML::Simple;
use Data::Dumper;
use Array::Diff;
use Data::Dumper;
$xml = new XML::Simple (KeyAttr=>[]);
my @tab_price=();
my @tab_article=[];
# read XML file
$prix = $xml->XMLin("prix.xml");
$article = $xml->XMLin("article.xml");
#Création des clés valeurs prix
foreach $i (@{$prix->{item}})
{
chomp;
$prices{"$i->{LITM}"} = "$i->{price}->{EXPR}";
}
#Création des clés valeurs articles
foreach $j (@{$article->{item}})
{
chomp;
$art{"$j->{LITM}"} = "$j->{LITM}";
}
#Test valeur (numéro d'article)
foreach $key_pri (keys %prices)
{
foreach $key_art (keys %art)
{
if($key_pri eq $key_art)
{
$value_pri = $prices{$key_pri};
#print"$key_art costs $value_pri\n";
foreach $i (@{$article->{item}})
{
push @tab_article, [$key_art,"$i->{part_description}->{DESC}", $value_pri,"\n"];
}
}
}
}
print Dumper @tab_article; |
et voici le résultat :
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
| $VAR1 = [];
$VAR2 = [
'664513',
'HPE DL38X Gen10 High Performance Fan',
'41.74',
'
'
];
$VAR3 = [
'664513',
'G-Tech Drive mobile USB 3.0, 2.5" 2TB',
'41.74',
'
'
];
$VAR4 = [
'756881',
'HPE DL38X Gen10 High Performance Fan',
'383.47',
'
'
];
$VAR5 = [
'756881',
'G-Tech Drive mobile USB 3.0, 2.5" 2TB',
'383.47',
'
'
]; |
Est-ce possible de m'aider s'il vous plait ? Et je ne sais si j'ai été assez clair dans ma demande d'aide ^^'