src/SYSLang/SYSLang.php
protected function extract($source, array &$output)
    {
        $dirname = dirname($source);

        // Traitement spécifique aux dossiers.
        if (is_dir($source)) {
            $dh = opendir($source);

            while($file = readdir($dh)){
                if (preg_match('/^\.{1,2}$/', $file)) continue;

                $this->extract($source . '/' . $file, $output);
            }

            closedir($dh);
        }
        // Traitement spécifique aux fichiers.
        if (is_file($source)) {
            try {
                $sxeResource = new \SimpleXMLElement(file_get_contents($source));

                // Parcourir la ressource XML
                for ($i = 0; $i < count($sxeResource->resource); $i++) {
                    // Traitement des elements commun :
                    $resource = $sxeResource->resource[$i];

                    $key = strval($resource->attributes()->KEY);
                    $value = strval($resource);

                    // Traitements des différentes sorties possibles
                    foreach ($this->targets as $attribut => $instructions) {
                        if(is_null($resource->attributes()->$attribut)) continue;
                        if(strtolower(strval($resource->attributes()->$attribut)) === 'false') continue;

                        $targetName = $instructions['name'];
                        $callback = $instructions['callback'];

                        if(!isset($output[$targetName])) $output[$targetName] = [];

                        call_user_func_array($callback, [$key, $value, &$output[$targetName]]);
                    }
                }
            } catch (\Exception $e) {
                // Ne pas emettre d'erreur
            }
        }
    }
protected function extract($source, array &$output)
    {
        $dirname = dirname($source);

        // Traitement spécifique aux dossiers.
        if (is_dir($source)) {
            $dh = opendir($source);

            while($file = readdir($dh)){
                if (preg_match('/^\.{1,2}$/', $file)) continue;

                $this->extract($source . '/' . $file, $output);
            }

            closedir($dh);
        }
        // Traitement spécifique aux fichiers.
        if (is_file($source)) {
            try {
                $sxeResource = new \SimpleXMLElement(file_get_contents($source));

                // Parcourir la ressource XML
                for ($i = 0; $i < count($sxeResource->resource); $i++) {
                    // Traitement des elements commun :
                    $resource = $sxeResource->resource[$i];

                    $key = strval($resource->attributes()->KEY);
                    $value = strval($resource);

                    // Traitements des différentes sorties possibles
                    foreach ($this->targets as $attribut => $instructions) {
                        if(is_null($resource->attributes()->$attribut)) continue;
                        if(strtolower(strval($resource->attributes()->$attribut)) === 'false') continue;

                        $targetName = $instructions['name'];
                        $callback = $instructions['callback'];

                        if(!isset($output[$targetName])) $output[$targetName] = [];

                        call_user_func_array($callback, [$key, $value, &$output[$targetName]]);
                    }
                }
            } catch (\Exception $e) {
                // Ne pas emettre d'erreur
            }
        }
    }
Extrait les textes associés à leur clé et les ranges dans le tableau fournir en argument.

@param string $source Emplacement vers la/les source(s) xml.
@param array  $output Tableau receuillant les ressources, rangé par target.