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 XML : 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 <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 XML : 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 <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 :
et voici le résultat :
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 #!/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;
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 $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 ^^'
Partager