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
| // fonction qui ouvre le fichier xml reçu en paramètre
public function xmlParse($xml)
{
//on charge notre fichier
$parseXml = simplexml_load_file($xml);
// on préfixe le nom de la table pour l'insertion des données
$this->_table = 'xml_'.$parseXml->getName();
// on attribue notre <root> à _fileXml
$this->_fileXml = $parseXml->getName();
// et on parse le xml
$this->_recursif($parseXml);
}
// fonction récursive qui parcourt le fichier xml
// et insert les données à la volée en base de données
protected function _recursif($xmlObj) {
// on parcourt les éléments enfants
foreach($xmlObj->children() as $child) {
//si on a plus d'enfant, on ajoute en base
if(!$this->_hasChildren($child)){
$insert = "INSERT INTO " . $this->_table . '_' . $child->getName() ." (" . implode(', ', array_keys((array) $child)) . ") VALUES ('" . implode("','", (array) $child) . "')";
$this->_em->getConnection()->executeUpdate($insert);
if(!empty($this->_parent)){
$this->_table = 'xml_' . $this->_fileXml . '_' . $this->_parent;
} else {
$this->_table = 'xml_' . $this->_fileXml;
}
//sinon, on rapelle notre fonction et parse les enfants
} else {
$this->_parent = $child->getName();
$this->_recursif($child);
}
}
}
// fonction qui vérifie si $element a des enfants
protected function _hasChildren($element)
{
$hasChild = false;
//on parcourt notre element
foreach($element->children() as $child){
$keys = array_keys((array)$child);
foreach($keys as $v){
//si notre element est un objet, alors on a un enfant
if(!is_numeric($v)){
$hasChild = true;
if(empty($this->_parent)){
$this->_table .= '_' . $element->getName();
}else{
$this->_table = 'xml_' . $this->_fileXml . '_' . $element->getName();
}
}
return $hasChild;
}
}
} |
Partager