Récupération dynamique de fichiers XML dans un dossier

Petit nouveau ! | 2 Messages

16 juin 2011, 15:54

Bonjour tout le monde,
voilà deux jours que je me penche sur un problème qui m'est épineux d'autant plus que la solution est, si ça tombe, extrêmement simple. Je vais essayer ici de le résumer :

Je dois diffuser un flux RSS sur des écrans publicitaires pour afficher des news, jusque là aucun problème je sais récupérer l'adresse et la placer dans le player, choisir le champs à utiliser et tout ça. Ca fonctionne avec la plupart des flux etc.
Nous avons donc acheté les droits de diffusion d'un flux, seulement voilà, ils nous donnent sur notre ftp un dossier rempli de fichiers xml contenant chacun un élément (news) dont la structure est la suivante :
[xml]
<?xml version="1.0" encoding="ISO-8859-15"?>
<news>
<title><![CDATA[Diesel en stookolie worden duurder]]></title>
<date>20110614T114522</date>
<img>pxy_45121824_41507376_19201080_8725253.jpg</img>
<category>SPECIAL/ECONOMY</category>
<language>nl</language>
</news>
[/xml]
Jusque là je ne voyais pas (pauvre de moi) de problème, même si c'était plutôt embêtant de faire un listing de tous les fichiers XML c'était faisable, mais voilà étant ce qu'ils sont (des news) les éléments sont pushés sur notre serveur à leur diffusion et donc me voilà à devoir générer un flux qui s'étend dynamiquement à chaque nouvel élément envoyé.

Je saurais (même si je ne connais pas encore la syntaxe xsl parfaitement) faire ça facilement en plusieurs passes mais ce ne serait pas optimal, en effet je serais obligé de lancer un script de génération du listing tous les x temps pour être sur que le flux soit à jour.

Je me suis donc attelé à lire le dossier grace à ceci:
<?php

$str2repl = '<?xml version="1.0" encoding="ISO-8859-15"?>'; //string à chercher pour remplacement
$XMLstring = $str2repl; //le fichier commence par celle ci
$dir = "./";

//j'ai récupéré ce bout de code pour pouvoir directement avoir une string d'un fichier
function get_include_contents($filename) {
    if (is_file($filename)) {
        ob_start();
        include $filename;
        return ob_get_clean();
    }
    return false;
}

if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false ){
			if (pathinfo($file, PATHINFO_EXTENSION)=='xml'){
						$bufferstring = str_replace($str2repl,'',get_include_contents($file)); //j'enleve la premiere ligne de chaque fichier xml
						$XMLstring .=  $bufferstring;		
			}
        }
        closedir($dh);
    }
}
d'où découle ma première question, j'ai des problèmes avec les "end of file" (je pense) qui sont inclus dans la string lors du l'inclusion. Le processeur ne peut donc pas interpréter ce qui se trouve après (et plante carrément), comment pourrais-je y remédier ?

J'ai plus ou moins compris qu'apres ça je devrais avoir quelque chose dans le genre

$XML = new DOMDocument(); 
$XML->loadXML($XMLstring); 
  
$xslt = new XSLTProcessor(); 
$XSL = new DOMDocument(); 

$XSL->load('xsl/index.xsl'); 
$xslt->importStylesheet( $XSL ); 

print $xslt->transformToXML( $XML ); 

?>
si je comprends bien, dans mon index.xsl, je vais avoir ma requete me permettant d'avoir la selection dont j'ai envie. J'ai jamais eu de problemes avec le mysql donc je comprends dans l'ensemble comment ça marche.

mais ce qui me pose problème c'est l'interprétation, en effet dans le navigateur ça ressemble à du html quand je fais juste un echo $XMLstring; et que l'extension est .php j'ai peur que le programme ne sache comment l'interprêter si la syntaxe n'est pas exactement la meme que du xml. (Scala player et designer 5.1 pour l'information)

Pour résumer, j'aurais besoin de vous pour :
1 • Comment supprimer un caractère de fin de fichier d'une string (je suppose que ça marcherait avec str_replace si je connaissais le nom du caractère)
2 • Vais-je parvenir par cette route à ma destination ?
3 • N'y a-t-il pas moyen de faire ça plus simplement ?
4 • Au final, pourrai-je donc avoir, juste à l'appel de la page, un flux rss contenant des champs que j'a sélectionné se trouvant dans différents documents pouvant être uploadés à tous moments ?


D'avance, merci beaucoup

Petit nouveau ! | 2 Messages

17 juin 2011, 15:08

bon, le problème de fin de document n'était dû qu'à mon manque de balise racine, au moins ça fonctionne pour l'instant, par contre je ne suis toujours pas sûr de ne pas avoir fait une usine à gaz pour un problème qui peut avoir une solution tres simple.