Bonjour à tous,

Demande d'aide qui sera, je pense, simple pour ceux et celles qui ont l'habitude de traiter avec PHP.

Le contexte :

Boutique en ligne avec import fournisseur distant. Fichier reçu en XML, traitement de la boutique d'un fichier CSV.

J'ai mis en place plusieurs scripts PHP pour l'import et la conversion.

Là où je bute c'est que dans le fichier XML qui comporte plusieurs colonnes, je n'en souhaite que deux. J'ai beau faire des tests, rien à faire.

L'idée serait soit :

- D'arriver à importer le fichier XML avec seulement les colonnes souhaitées puis de le convertir en CSV avec les colonnes.

- D'arriver à importer le fichier en intégralité mais de n'importer que les colonnes voulues lors de la conversion en CSV.

Ce n'est que cette étape d'extraction que je n'arrive pas à réaliser.

Dernier test qui s'est révélé infructueux :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
$map = [
    'ProductCode' => 'ProductCode',
    'StockQty' => 'StockQty',
];
 
foreach($map as $csvCol => $xmlCol) {
    if (isset($theCSVRow[ $csvCol ])) {
          $xml->addChild($xmlCol, $theCSVRow[ $csvCol ]);
    }
}
J'en appelle donc aux professionnels du PHP pour m'aider à résoudre ce petit casse-tête 😎

À noter que l'écriture ne peut se faire directement en BDD. Le fichier CSV est importé ensuite en tâche CRON dans StoreCommander qui le traite ensuite pour mettre à jour les stocks produits.

Merci et bon dimanche !

Ci-dessous, le code utilisé pour la conversion du fichier XML reçu en CSV:

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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
/* CONVERSION XML > CSV */
function convertXmlToCsvFile($xml_file_input, $csv_file_output, $nomLien) 
{
    $tableauTailles = array('XS','S','M','SM','ML','L','XL','XXL','T1','T2','T3','T4','X1','X2','X3') ;
 
    $xml = simplexml_load_file($xml_file_input);        
    $output_file = fopen($csv_file_output, 'w');        
    $header = false;
 
    $donneesSmiffys = 'ProductCode;ProductName;Size;BrochureDescription;WebDescription;WashingInstructions;RRP;StockQty;VatRate;Gender;PackType;PackQty;Audience;Colour;ETA;BarCode;Price1;Price2;Price3;Break1;Break2;Break3;unit_size;carton;stdPrice1;stdPrice2;stdPrice3;stdBreak1;stdBreak2;stdBreak3;Photo;CatalogueCode;CatalogueName;Catalogue;acc_code1;acc_code2;acc_code3;acc_code4;acc_code5;alt_code1;alt_code2;alt_code3;alt_code4;alt_code5;FrontShot;art_cat;Seasonal;p_list2;DropDate;ThemeName;Theme1;GroupID;GroupName;GroupID1;ThemeGroup1;GroupID2;ThemeGroup2;GroupID3;ThemeGroup3;EF_Price;EF_Qty;unit_length;unit_width;unit_height;unit_weight;unit_qty;inner_length;inner_width;inner_height;inner_weight;inner_qty;outer_length;outer_width;outer_height;outer_weight;outer_qty;GenericCode;HasImageRights;Safety;Composition;AmazonAsins
' ;
 
    foreach($xml as $key => $value)
    {
        // TRAITEMENT SHEET         
        $tabValeur = get_object_vars($value) ;
 
 
        // SIZE         
        preg_match('/([0-9]+)([a-zA-Z]+)/', $tabValeur["ProductCode"], $size);
        preg_match('/([0-9]+)([a-zA-Z]{1}[0-9]{1})/', $tabValeur["ProductCode"], $size2);
        if (in_array($size[2], $tableauTailles)) $taille = $size[2] ;
        elseif (in_array($size2[2], $tableauTailles)) $taille = $size2[2] ;
        else $taille = '' ;
 
        // REFERENCE
        $donneesSmiffys .= 'SM' . $tabValeur["ProductCode"] . ';'               
            . $tabValeur["ProductName"] . ';'
            . $taille . ';'
            . $tabValeur["BrochureDescription"] . ';'
            . $tabValeur["WebDescription"] . ';'
            . $tabValeur["WashingInstructions"] . ';'
            . $tabValeur["RRP"] . ';'
            . $tabValeur["StockQty"] . ';'
            . $tabValeur["VatRate"] . ';'
            . $tabValeur["Gender"] . ';'
            . str_replace(';',',',$tabValeur["PackType"]) . ';'
            . $tabValeur["PackQty"] . ';'
            . $tabValeur["Audience"] . ';'
            . $tabValeur["Colour"] . ';'
            . $tabValeur["ETA"] . ';'
            . $tabValeur["BarCode"] . ';'
            . $tabValeur["Price1"] . ';'
            . $tabValeur["Price2"] . ';'
            . $tabValeur["Price3"] . ';'
            . $tabValeur["Break1"] . ';'
            . $tabValeur["Break2"] . ';'
            . $tabValeur["Break3"] . ';'
            . $tabValeur["unit_size"] . ';'
            . $tabValeur["carton"] . ';'
            . $tabValeur["stdPrice1"] . ';'
            . $tabValeur["stdPrice2"] . ';'
            . $tabValeur["stdPrice3"] . ';'
            . $tabValeur["stdBreak1"] . ';'
            . $tabValeur["stdBreak2"] . ';'
            . $tabValeur["stdBreak3"] . ';'
            . $photos . ';'
            . $tabValeur["CatalogueCode"] . ';'
            . $tabValeur["CatalogueName"] . ';'
            . $tabValeur["Catalogue"] . ';'
            . $tabValeur["acc_code1"] . ';'
            . $tabValeur["acc_code2"] . ';'
            . $tabValeur["acc_code3"] . ';'
            . $tabValeur["acc_code4"] . ';'
            . $tabValeur["acc_code5"] . ';'
            . $tabValeur["alt_code1"] . ';'
            . $tabValeur["alt_code2"] . ';'
            . $tabValeur["alt_code3"] . ';'
            . $tabValeur["alt_code4"] . ';'
            . $tabValeur["alt_code5"] . ';'
            . $tabValeur["FrontShot"] . ';'
            . $tabValeur["art_cat"] . ';'
            . $tabValeur["Seasonal"] . ';'
            . $tabValeur["p_list2"] . ';'
            . $tabValeur["DropDate"] . ';'
            . $tabValeur["ThemeName"] . ';'
            . $tabValeur["Theme1"] . ';'
            . $tabValeur["GroupID"] . ';'
            . $tabValeur["GroupName"] . ';'
            . $tabValeur["GroupID1"] . ';'
            . $tabValeur["ThemeGroup1"] . ';'
            . $tabValeur["GroupID2"] . ';'
            . $tabValeur["ThemeGroup2"] . ';'
            . $tabValeur["GroupID3"] . ';'
            . $tabValeur["ThemeGroup3"] . ';'
            . $tabValeur["EF_Price"] . ';'
            . $tabValeur["EF_Qty"] . ';'
            . $tabValeur["unit_length"] . ';'
            . $tabValeur["unit_width"] . ';'
            . $tabValeur["unit_height"] . ';'
            . $tabValeur["unit_weight"] . ';'
            . $tabValeur["unit_qty"] . ';'
            . $tabValeur["inner_length"] . ';'
            . $tabValeur["inner_width"] . ';'
            . $tabValeur["inner_height"] . ';'
            . $tabValeur["inner_weight"] . ';'
            . $tabValeur["inner_qty"] . ';'
            . $tabValeur["outer_length"] . ';'
            . $tabValeur["outer_width"] . ';'
            . $tabValeur["outer_height"] . ';'
            . $tabValeur["outer_weight"] . ';'
            . $tabValeur["outer_qty"] . ';'
            . $tabValeur["GenericCode"] . ';'
            . $tabValeur["HasImageRights"] . ';'
            . $tabValeur["Safety"] . ';'
            . $tabValeur["Composition"] . ';'
            . $tabValeur["AmazonAsins"] . '
';
 
        unset($size) ;
    }
 
    // WRITING FILE
    $file = fopen($csv_file_output, 'w');
    fwrite($file, $donneesSmiffys);
    fclose($file);
}
?>