Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MOTEUR DE TEMPLATE XSL UTILISANT LA CLASSE XSLTPROCESSOR ET DOMNODES (AVEC FILS)


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : xsl, xml, xslt, xsltprocessor, transform Niveau : Initié Date de création : 12/09/2007 Date de mise à jour : 12/09/2007 02:04:07 Vu / téléchargé: 2 195 / 115

Note :
Aucune note

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

Description

Bonjour tout le monde !
Je me lance dans une tentative de moteur de template en xml/xsl(t), car légion sont les moteurs de template en mode parseur, mais peu sont ceux en mode xml/xsl :)

Pour instancier la classe, vous avez plusieurs paramètres possibles :
* le premier, permet de choisir le nom de l'élément racine (de base : root)
* le second permet de choisir l'adresse du cache (et oui ! ya un cache :))
* les deux suivants permettes de choisir la version et l'encodage de l'élément XML

Alors, une fois l'élément instancié, il est possible d'ajouter des elements xml de deux manières :
soit par la méthode append (TagName, Content, bCDATA), qui ajoute l'élément xml TagName, contenant Content, en mode CDATA si bCDATA est à true
ou par la méthode appendXml (DOMDocument oDDXml), qui ajoute l'élément DOMDocument oDDXml
La méthode appendXml est la plus agréable à utiliser, car vous pouvez retourner un objet domdocument depuis vos autres classes, et les imbriquer à la suite dans le moteur de template

Une fois le travail terminé, vous n'avez plus qu'a faire
$objetXSLT->transform ('Adresse/nomdufichier.xsl', bShow);

la fonction transform va vérifier dans le cache (si on utilise le cache (parametre $objetXSLT->useCache à true (défault : true))) si le fichier existe
(le fichier est encodé de cette manière sha1($sel.$fileName), biensur, le sel est modifiable : $objetXSLT->salt))

Mais j'ai opté pour une autre manière plus subtile pour la gestion du cache.
Au lieu de s'amuser avec la date du cache, au risque de ne pas être tout de suite à jour, je suis parti sur une autre méthode :
je met l'élément xml, suivi d'un délimiteur, suivit du document xsl transformé.
Quand j'ouvre le fichier en cache, je le découpe par rapport au délimiteur. Si le xml (première partie) et identique à mon xml courant, alors je n'ai pas besoin de transformer le fichier xsl, je n'ai juste qu'à retourner la deuxieme partie du fichier. Sinon je le transforme.

L'avantage de cette méthode, c'est que le cache se gere indépendement. Le désavantage, c'est que j'utilise une fonction d'acces et de lecture au fichier, fonctions en plus comparé une simple vérification de version de fichier.

Voici les propriétés que vous pouvez modifier
$XSLTransform->delimiter = 'Le délimiteur qui sépare le XML du XSLTransformé';
$XSLTransform->salt = 'Le sel qui permet l\'encodage du nom du fichier';
$XSLTransform->extension = 'L\'extension du fichier en cache (sans le point)';
$XSLTransform->useCache = true/false; (Si on utilise le cache ou pas (ca ne sert à rien dans le cas ou, par exemple, on affiche l'heure sur la page en passant par un xml :p)
$XSLTransform->cachePath = 'L\'adresse du cache/';


$XSLTransform->transformOnClose = true/false; (Si on transforme le document à la fermeture (__destruct))
// Dans ce cas, la variable
$XSLTransform->XslPathFile doit contenir l'adresse et le nom du fichier xsl
--> Ces deux derniers paramètres seront remplis lors de l'appel de la fonction
$XSLTransform->transformOnClose ('Adresse et nom du fichier xsl');
(par contre ca ne marche pas, la fonction is_file ne trouve pas le fichier alors qu'il existe, (ca marche pour ->transform et pas pour ca), je ne sais pas pourquoi ! :/)

Voila je vous ai tout dit, je vous laisse voir un exemple, et le code est dans le zip, bien entendu :)
 

Source

  • <?php
  • // On inclu la classe de traitement
  • require_once ('view/xsltransform.class.php');
  • // On l'instancie
  • $xslt = new XSLTransform ('page');
  • // On prépare un object DOMDocument
  • $oDom = new DOMDocument ();
  • $bibli = $oDom->createElement ('bibli');
  • $rootNode = $oDom->createElement ('mp3');
  • $rootNode->appendChild ($oDom->createElement('artiste', 'artiste1'));
  • $rootNode->appendChild ($oDom->createElement('titre', 'titre1'));
  • $bibli->appendChild ($rootNode);
  • $rootNode = $oDom->createElement ('mp3');
  • $rootNode->appendChild ($oDom->createElement('artiste', 'artiste2'));
  • $rootNode->appendChild ($oDom->createElement('titre', 'titre2'));
  • $bibli->appendChild ($rootNode);
  • $rootNode = $oDom->createElement ('mp3');
  • $rootNode->appendChild ($oDom->createElement('artiste', 'artiste3'));
  • $rootNode->appendChild ($oDom->createElement('titre', 'titre3'));
  • $bibli->appendChild ($rootNode);
  • $oDom->appendChild ($bibli);
  • // Objet qui sera du type <bibli><mp3><artiste>xxx</artiste><titre>yyy</titre></mp3><mp3>...</mp3>....</bibli>
  • // (pour l'exemple :) )
  • // On l'ajoute à notre objet
  • $xslt->appendXml ($oDom);
  • // Et on le transforme
  • echo $xslt->transform ('test.xsl');
  • // On peux aussi faire $xslt->transform ('test.xsl', true);
  • // Ce qui affichera tout seul le résultat
  • ?>
<?php
// On inclu la classe de traitement
require_once ('view/xsltransform.class.php');

// On l'instancie
$xslt = new XSLTransform ('page');

// On prépare un object DOMDocument
$oDom = new DOMDocument ();
$bibli = $oDom->createElement ('bibli');

$rootNode = $oDom->createElement ('mp3');
$rootNode->appendChild ($oDom->createElement('artiste', 'artiste1'));
$rootNode->appendChild ($oDom->createElement('titre', 'titre1'));
$bibli->appendChild ($rootNode);

$rootNode = $oDom->createElement ('mp3');
$rootNode->appendChild ($oDom->createElement('artiste', 'artiste2'));
$rootNode->appendChild ($oDom->createElement('titre', 'titre2'));
$bibli->appendChild ($rootNode);

$rootNode = $oDom->createElement ('mp3');
$rootNode->appendChild ($oDom->createElement('artiste', 'artiste3'));
$rootNode->appendChild ($oDom->createElement('titre', 'titre3'));
$bibli->appendChild ($rootNode);

$oDom->appendChild ($bibli);
// Objet qui sera du type <bibli><mp3><artiste>xxx</artiste><titre>yyy</titre></mp3><mp3>...</mp3>....</bibli>
// (pour l'exemple :) )

// On l'ajoute à notre objet
$xslt->appendXml ($oDom);


// Et on le transforme
echo $xslt->transform ('test.xsl');

// On peux aussi faire $xslt->transform ('test.xsl', true);
// Ce qui affichera tout seul le résultat
?>

Conclusion

N'hésitez pas à me proposer des modifications, des optimisations, je suis à votre écoute :)

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

12 septembre 2007 02:04:07 :
Rajout d'informations :)

Commentaires et avis

Aucun commentaire pour le moment.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

probleme fatal error call undefined function [ par ad102 ] Bonjour Voila mon probleme : lorsque je fais l'appel d'une fonction dans mon programme celle-ci n'est pas reconnue alors que je pense&nbsp;l'avoir bie Problème génération tableau après avoir parsé mon XML [ par Akita95 ] Bonjour à tous,Je sollicite votre aide car je suis dans une impasse et j'ai un problème :( Après avoir longtemps cherché, sur le net et sur ce site, j Aidez moi svp (XML-->XSLT---->php ) [ par aziza_net ] bonjour ... voila : je travail sur des etats (les etats d'impression) sous windows avec crystal report... maintenant je dois travailler 1 partie de m xml & xsl [ par Teclis01 ] Bonjour J'ai un petit soucis que je ne sais pas comment m'y prendre pour le régler... Je vous explique :)J'ai des noeuds xml qui ressemble à ceci ...& Xml et Xsl ... [ par Teclis01 ] Bonzour ça fait un ptit moment que je me prend la tête et je suis sur que c'est pour pas grand chose alors je vais vous expliquer mon soucis j'ai un f Transformation XSL [ par sheeana_kt ] Bonjour à tous,Je suis en train de refondre mon site et je souhaite utiliser la techno XML/XSL. L'idée est d'utiliser le XML comme "bus" d'information Lecture à partir d'un lien hypertexte d'une page XML transformée en XSLT [ par grijalvas ] Bonjour, J'ai réalisé une page XML. Je l'ai transformée en informations lisibles par le navigateur en créant la page XSLT(sous-ensemble du langage XS Balise Html Xml vers Xsl [ par toomsbzh ] Bonjour, je suis désolé mais je ne pense pas avoir posté au bon endroit mais bon...Voila mon souci, j'ai un fichier xml assez conséquent qui contient comment insérer un saut de ligne entre chaque balise xml ? [ par nicomilville ] Salut,je suis confronté a un problème, je fais un chat en php avec xml mais je n'arrive pas a sautter de ligne entre chaque balise xml de mon fichier, xml et php [ par agbebe ] salut !!!voila, je voudrais savoir que lorsqu'on utilise un fichier xml on a plus besoin de base de données pour stocker les infos ???dans tous les ca


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,53 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.