1 pièce(s) jointe(s)
XML DomDocument optimisation de code
Bonjour,
J'ai un fichier xml à traiter qui possède plus de 29000 noeuds, et j'ai besoin de votre aide pour optimiser mon code qui le parcours.
Pour le moment je peux traiter environ 14000 noeuds après quoi j'ai une erreur :
Citation:
Fatal error: Maximum execution time of 120 seconds exceeded....
Voici le code que je souhaite optimiser
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
|
// recuperation du nombre d'enregistrement
$clients = $dom->getElementsByTagName("clients")->item(0);
if ($clients->hasAttribute("nb"))
{
$nbClient = $clients->getAttribute("nb");
}
for($i=0; $i<$nbClient; $i++)
{
$listClient = $dom->getElementsByTagName('client')->item($i);
$arrSet = array();
$arrSet['tstamp'] = $time;
foreach($listClient->childNodes as $node)
{
if($node->nodeType == XML_ELEMENT_NODE)
{
$tagName = trim($node->tagName);
$nodeValue = trim($node->nodeValue);
if($tagName == 'datmod' or $tagName == 'datsup')
{
if(!empty($nodeValue)){
list($date, $Heure) = explode('T', $nodeValue);
list($annee, $mois, $jour) = explode('-', $date);
list($heure, $minute, $seconde) = explode(':', $Heure);
$nodeValue = mktime($heure, $minute, $seconde, $mois, $jour, $annee);
}
else{
$nodeValue = 0;
}
}
$arrSet[$tagName] = $nodeValue;
}
}
$this->Database->prepare("INSERT INTO `tl_ds_preregistration` %s")->set($arrSet)->execute();
} |
Pour info j'ai fait des tests en mettant en commentaire le foreach et l'insert into et j'ai le même problème, je pense donc qu'il faut que je lise mon XML autrement sans faire de boucle.
La ligne qui ne semble pas du tout être optimisé est celle ci :
Code:
$listClient = $dom->getElementsByTagName('client')->item($i);
Je vous joins un extrait du fichier XML