Home»Développement»Code PHP : Appliquer un template XSLT à XML à l’aide de domxml

Code PHP : Appliquer un template XSLT à XML à l’aide de domxml

0
Shares
Pinterest Google+

Si vous avez déjà codé un gestionnaire de contenu (CMS) ou un simple site/blog, vous avez de grandes chances de vous être heurté à un moment ou un autre à la problématique des templates.

Un template est un modèle de page, de contenu, d’élément que l’on applique à des données pour les mettre en forme. Il existe plusieurs moteurs de templates pour PHP : Smarty, VTemplate, ModeliXe, phpBB …etc chacun ses forces et ses faiblesses.

Cependant, tous ses moteurs ne répondent à aucun standard, et dans la majorité des développements si ce n’est tous, on peut très bien s’en sortir avec des templates XSL.

En effet, en appliquant du XSL à des données formatées en XML, on peut obtenir en sorti du text, de l’html ou de l’XML reformaté. je ne vais pas expliquer ici le fonctionnement de XSLT, calà fera peut être l’objet d’un autre billet?

XML et XSL sont des standard, vos templates fonctionneront aussi bien avec du PHP qu’avec du python, du .Net ou du Java … peu importe.

pour mettre en place un système de templates, la démarche est assez simple. Tout d’abord il faut construire une source de données au format XML, ensuite il faut écrire le template XSL correspondant, et enfin passer tout celà dans la moulinette ci-dessous :

        //domxml XSL transformer by Alaa-eddine KADDOURI
        //$xml = XML string or url to xml file
        //$xsl = XSL string or url to xsl file
       //$arParams = XSL parameters
	private function domxml($xml, $xsl, $arParams)
	{
		$xslt = new XSLTProcessor();
		$xmldoc = new domDocument();

		//TODO : check errors
		$xmldoc->loadXML($xml);
		if ($xmldoc == null)
			$xmldoc->load($xml);

		$str = $xmldoc->saveXML();
		$xsldoc = new domDocument();
		$xsldoc->load($xsl);
		if ($xsldoc == null)
			$xsldoc->loadXML($xsl);

		$str = $xsldoc->saveXML();

		$xslt->importStylesheet($xsldoc);

		if ($arParams != null && sizeof($arParams) > 0)
		{
			foreach ($arParams as $key => $value)
			$xslt->setParameter(null, $key, $value );
		}

		return $xslt->transformToXml($xmldoc);
	}

La méthode ci-dessus prend en paramètre une chaine xml ou un fichier xml, une chaine xsl ou un fichier xsl, un tableau (clé/valeur) représentant les paramètre à passer au template XSL.

En sortie cette méthode renvoi le produit du template XSLT appliqué au XML.

Et voilà, vous avez votre propre moteur de templates 😉 ajoutez à ceci un petit système de cache éviter de surcharger le CPU et vous obtenez un moteur de templates qui n’a rien à envier aux autres déjà existants.

ici j’ai utilisé la méthode domxml basée sur une extension php (pré installée sur la plupart des serveurs aujourd’hui), il existe cependant d’autres méthodes comme sablotron (plus ancien et plus gourmand en ressource) ou encore xsltproc si vous avez accès à la méthode exec … j’y reviendrais plutard 😉