Bonjour à tous,
D'abod, un tout grand merci à la communauté de ce site pour les préciseuses informations ! :-)
Après de multiple recherche, j'en arrive à vous poser directement la question, je suis d'un niveau très débutant en PHP, et si l'un de vous pouvait me donner un petit coup de pouce, ce serait formidable.
Via une URL, j'ai accès à des fichiers XML. Ces fichiers XML (un par produit et de structure identique) contiennent des informations sur des produits.
Je souhaite récupérer ces informations et les stocker dans une base de donnée.
J'ai trouvé un parser XML avec clsParseXML class.
Il retourne toutes les données du fichier XML dans un Array.
J'aimerai récupérer les informations pour les introduire dans une base de donnée XML.
Voici la classe :
<?php
class ParseXML{
function GetChildren($vals, &$i) {
$children = array(); // Contains node data
if (isset($vals[$i]['value'])){
$children['VALUE'] = $vals[$i]['value'];
}
while (++$i < count($vals)){
switch ($vals[$i]['type']){
case 'cdata':
if (isset($children['VALUE'])){
$children['VALUE'] .= $vals[$i]['value'];
} else {
$children['VALUE'] = $vals[$i]['value'];
}
break;
case 'complete':
if (isset($vals[$i]['attributes'])) {
$children[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes'];
$index = count($children[$vals[$i]['tag']])-1;
if (isset($vals[$i]['value'])){
$children[$vals[$i]['tag']][$index]['VALUE'] = $vals[$i]['value'];
} else {
$children[$vals[$i]['tag']][$index]['VALUE'] = '';
}
} else {
if (isset($vals[$i]['value'])){
$children[$vals[$i]['tag']][]['VALUE'] = $vals[$i]['value'];
} else {
$children[$vals[$i]['tag']][]['VALUE'] = '';
}
}
break;
case 'open':
if (isset($vals[$i]['attributes'])) {
$children[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes'];
$index = count($children[$vals[$i]['tag']])-1;
$children[$vals[$i]['tag']][$index] = array_merge($children[$vals[$i]['tag']][$index],$this->GetChildren($vals, $i));
} else {
$children[$vals[$i]['tag']][] = $this->GetChildren($vals, $i);
}
break;
case 'close':
return $children;
}
}
}
function GetXMLTree($xmlloc){
if (file_exists($xmlloc)){
$data = implode('', file($xmlloc));
} else {
$fp = fopen($xmlloc,'r');
while(!feof($fp)){
$data = $data . fread($fp, 1024);
}
fclose($fp);
}
$parser = xml_parser_create('UTF-8');
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $data, $vals, $index);
xml_parser_free($parser);
$tree = array();
$i = 0;
if (isset($vals[$i]['attributes'])) {
$tree[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes'];
$index = count($tree[$vals[$i]['tag']])-1;
$tree[$vals[$i]['tag']][$index] = array_merge($tree[$vals[$i]['tag']][$index], $this->GetChildren($vals, $i));
} else {
$tree[$vals[$i]['tag']][] = $this->GetChildren($vals, $i);
}
return $tree;
}
}
?>
Voici la requète pour afficher :
<?php
include 'clsParseXML.php';
$xmlparse = &new ParseXML;
$xml = $xmlparse->GetXMLTree('/path/to/xmlfile.xml');
echo "<pre>";
print_r($xml);
echo "</pre>";
?>
Et une partie du résultat :
[UNSPSCDESC] => Array
(
[0] => Array
(
[ATTRIBUTES] => Array
(
[LANG] => NL
[ID] => OT1008
)
[VALUE] => Desktop computers
)
)
[MANUFACTURER] => Array
(
[0] => Array
(
[ATTRIBUTES] => Array
(
[LANG] => NL
[ID] => OT1004
)
[VALUE] => HP
)
)
[MANUFACTURERID] => Array
(
[0] => Array
(
[ATTRIBUTES] => Array
(
[LANG] => NL
[ID] => OT1007
)
[VALUE] => AA797A#ABH
)
)
L'idée, c'est de stocker la valeur de chaque ID dans SQL.
Exemple :
ID [OT1008] (le nom du champ est OT1008) -> Valeur "Desktop computers"
ID [OT1004] (le nom du champ est OT1004) -> Valeur "HP"
ID [OT1007] (le nom du champ est OT1007) -> Valeur "AA797A#ABH"
Et je n'arrive vraiement pas à trouver un bout de code pour faire cela ...
Si l'un de vous pouvais m'éguiller, ce serait formidable !
Un tout grand merci d'avance,
Gaëtan