/**
  *
  * @param string $name
  * @param array $params
  * @return mixed 
  */
 public function __call($name, array $params)
 {
     if (preg_match('#^get(.+)$#', $name, $out)) {
         return $this->__get(strtolower($out[1]));
     }
     if (preg_match('#^set(.+)$#', $name, $out)) {
         return $this->__set(strtolower($out[1]), $params[0]);
     }
     if (preg_match('#^child(.+)$#', $name, $out)) {
         $elementname = strtolower($out[1]);
         $empty_allowed = isset($params[2]) ? $params[2] : false;
         if (isset($params[0]) && SceauTools::isXMLElement($params[0])) {
             if ($params[0]->getName() != $elementname) {
                 throw new Exception("Le nom de la balise ne correspond pas : {$elementname} attendu, " . $params[0]->getName() . " trouvé.");
             }
             if (!$params[0]->isEmpty() || $empty_allowed) {
                 return $this->addChild($params[0]);
             }
             return false;
         }
         $child = new SceauXMLElement("<{$elementname}></{$elementname}>");
         if (isset($params[1])) {
             foreach ($params[1] as $att => $value) {
                 $child->addAttribute($att, $value);
             }
         }
         if (!isset($params[0]) || is_null($params[0])) {
             if ($empty_allowed) {
                 return $this->addChild($child);
             }
             return false;
         }
         if (is_string($params[0]) or is_int($params[0])) {
             if (SceauTools::isXMLstring($params[0])) {
                 $granchild = $this->createChild($params[0]);
                 $child->addChild($granchild);
             } else {
                 $child->setValue($params[0]);
             }
         }
         if (!$child->isEmpty() || $empty_allowed) {
             return $this->addChild($child);
         }
         return false;
     }
 }