Aller au menu - Aller au contenu

Les bases de la mise en forme XML avec XSLT

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Pseudo Commentaire
Page 1 
Hors ligne Iso # Posté le 16/11/2009 à 19:04:35
Groupe : Aigris
Avatar
Groupe : Bannis

Études : EFREI

Une très bonne initiation au XSLT malgré quelques défauts quant à la rédaction et l'orthographe.

Merci pour ce tuto !

EFREI Promotion Asyria 2014
ex-[BDE eX’Panda’ble] [EFREI Linux] [HIFI EFREI] [Équipe Système]

(╯°□°)╯︵ ʞooqǝɔɐɟ
 
Hors ligne Panpan # Posté le 16/11/2009 à 20:27:33
Avatar

Ville : St nicolas de macherin
Pays : France métropolitaine

Citation : Banana split
Je ne vous ai appris que la mise en forme. En réalité, on peut aussi transformer une page XML avec XSLT.


La mise en forme n'est pas différente de la transformation, elle en est un cas particulier. Tu as choisi de présenter une transformation de ton document xml en un document html, et c'est ce choix qui en fait une "mise en forme".
A part cette façon d'aborder le xslt qui ne le présente pas dans son cas général, ça reste une bonne idée d'aborder le sujet. Je trouve toutefois le tuto un peu "expéditif", plus proche de l'exemple que du tuto, mais c'est propre et précis.

EDIT :
En relisant l'ensemble en diagonale, une remarque supplémentaire : le titre "Afficher une page XSL en php..." est un peu approximatif, tu expliques toi-même très bien en amont qu'on affiche pas le XSL en soi...
Hors ligne Radioxid # Posté le 16/11/2009 à 21:35:15
about:black please!
Avatar

Ville : Nogent le rotrou
Pays : France métropolitaine

Si je ne trompe pas, le XSL correspond au CSS si le XML équivaut au HTML ?
---
Si on transforme l'XML en HTML avec XSL via PHP, ça n'a plus aucun intéret !

Une page XSL n'est chargée qu'une fois et le XML (le HTML allégé) est appelé quand il faut... Pourquoi rendre du XML/XSL avec PHP ? Pourquoafaire ?

The Antipop _ Radio/Video
Le (x)HTML pour les daltoniens !!
Image utilisateur

Vous les voyez, les pommes? Dommage, c'est joli...

 
Hors ligne picode # Posté le 16/11/2009 à 23:18:29
Avatar

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaah, enfin un tuto sur XSLT, il était grand temps (à moins d'avoir loupé un tuto plus ancien ?). Je l'attendais avec impatiente. XSLT est extrêmement puissant mais un tant soit peu délicat à manipuler.

Bonne continuation à ce tuto et merci à son auteur !
Hors ligne Marcus02 # Posté le 17/11/2009 à 00:40:26
Avatar

Bonjour Banana Split,

Ceci est un commentaire très rapide qui ne concerne pas le contenu de ton tuto mais plutôt son sujet.
Avais-tu en effet remarqué que le tutoriel "Comment parser facilement du XML" traite presque exactement du même sujet (je t'accorde que le titre est loin d'être explicite, voire même mal choisi) ?

Bonne continuation ! ^^
Hors ligne french-petzouille # Posté le 17/11/2009 à 08:00:33
Avatar

J'ai rien compris
Un tuto qui ne s'adresse pas au Zér0 de base :(

Mac User depuis déjà 20 ans ! Moi sur Rodez (Aveyron)... alors si Toi pas loin et Toi bidouiller en Php et Mysql ... contacte moi ;)
 
Hors ligne Banana Split # Posté le 17/11/2009 à 13:33:19
C'est bonnnnn
Avatar

Avis : Très bon

Ville : Lagny sur marne
Pays : France métropolitaine

french-petzouille->Il faut tout de même connaître le XML et le HTML et avoir un minimum de compréhension pour comprendre le tutorial. (Sinon, c'est comme si tu regardais un tutorial sur Linux alors que tu as toujours été sur Windows, en clair, tu comprend que dalle)

Radioxd->Le PHP n'est pas obligatoire si tu souviens bien. C'est uniquement nécessaire si tu voulais afficher des données XML mises en forme sur une page PHP. C'est souvent utile quand on fait un site dynamique et qu'on utilise du XML.

picode->merci !

panpan->c'est vrai, je vais corriger ça dans une prochaine version, un peu plus joviale aussi

marcus02->je l'ai remarqué après mais jamais je n'aurais sut que c'était sur le XSLT si je n'avais pas cliqué dessus par hasard. je l'ai lu et j'ai remarqué qu'on avait une optique un peu différente; ça fait de la variété :D

iso->merci à toi :)

NON, NE CLIQUEZ PAS LA !!! NON !
Si vous avez cliqué, la cure est ici
 
Hors ligne french-petzouille # Posté le 18/11/2009 à 10:28:09
Avatar

Citation
french-petzouille->Il faut tout de même connaître le XML et le HTML et avoir un minimum de compréhension pour comprendre le tutorial. (Sinon, c'est comme si tu regardais un tutorial sur Linux alors que tu as toujours été sur Windows, en clair, tu comprend que dalle)

C'est bien le cas .
j'ia des notions light de XML ... OK en HTML ...mais ton tuto m'a vite découragé.
PS : je suis depuis 20 ans sur Mac :) et pas Windaube

Mac User depuis déjà 20 ans ! Moi sur Rodez (Aveyron)... alors si Toi pas loin et Toi bidouiller en Php et Mysql ... contacte moi ;)
 
Hors ligne WarriorDog # Posté le 19/11/2009 à 19:22:20
Avatar

Ce tuto n'est pas trop mal, néanmoins le code est trop balancé à la volée...J'ai pas l'impression que tu aies décrit réellement à quoi ça servait. Il faudrait mettre l'accent sur la différence entre XSL et XSLT. Dire qu'il est possible de transformer le XML en HTML, PDF et XML :D
Sinon ce code chez moi ne marche pas:
Code : XML
1
2
3
4
5
6
7
8
9
<code type="xml">
<xsl:for-each select="test/jeu">
    <tr>
      <td><xsl:value-of select="@id"/></td>
      <td><xsl:value-of select="nom"/></td>
      <td><xsl:value-of select="type"/></td>
      <td><xsl:value-of select="prix"/></td>
    </tr>
</xsl:for-each></code>

Néanmoins celui-ci qui me parait plus logique et plus simple marche:
Code : XML
1
2
3
4
5
6
7
8
<xsl:for-each select="test/jeu">
    <tr>
      <td><xsl:value-of select="@id"/></td>
      <td><xsl:value-of select="nom"/></td>
      <td><xsl:value-of select="type"/></td>
      <td><xsl:value-of select="prix"/></td>
    </tr>
</xsl:for-each>


Cordialement,
WarriorDog

"I am the Master of my fate, I am the Captain of my Soul"
 
Hors ligne Banana Split # Posté le 19/11/2009 à 19:40:57
C'est bonnnnn
Avatar

Avis : Très bon

Ville : Lagny sur marne
Pays : France métropolitaine

Merci beaucoup WarriorDog, c'est une erreur de ma part. J'ai mis deux fois les balises code du zCode. Je corrige ça dans une prochaine version.

NON, NE CLIQUEZ PAS LA !!! NON !
Si vous avez cliqué, la cure est ici
 
Hors ligne WarriorDog # Posté le 22/11/2009 à 10:01:03
Avatar

Lol regarde encore, tu remarquera un mauvais copier coller ;)

"I am the Master of my fate, I am the Captain of my Soul"
 
Hors ligne Banana Split # Posté le 22/11/2009 à 11:07:58
C'est bonnnnn
Avatar

Avis : Très bon

Ville : Lagny sur marne
Pays : France métropolitaine

Ah flute, merci encore.

NON, NE CLIQUEZ PAS LA !!! NON !
Si vous avez cliqué, la cure est ici
 
Hors ligne Radioxid # Posté le 01/12/2009 à 12:09:33
about:black please!
Avatar

Ville : Nogent le rotrou
Pays : France métropolitaine

Banana Split, "je souviens", mais je ne situe pas l'intéret de mixer le XML/XSLT avec PHP sur le serveur et donc AVANT d'envoyer le HTML résultant au client.

Je ferais plutôt ainsi : serveur stocke pleins de fichiers PHP/XML, traites ces fichiers avec PHP; les envoi en XML et envoie UNE seule page XSL, une seule fois. Le client génère le HTML. C'est peut-être ce que tu as voulu dire mais j'a pô pigé ?

EDIT: pour moi php génère du XML et non du html, sinon aucun intéret !

The Antipop _ Radio/Video
Le (x)HTML pour les daltoniens !!
Image utilisateur

Vous les voyez, les pommes? Dommage, c'est joli...

 
Hors ligne Chicobuarque # Posté le 26/08/2010 à 18:52:59

Ville : Nice
Pays : France métropolitaine

Citation
Mais attention : il est impossible d'exploiter du contenu dynamique, tel que du PHP ou de l'ASP par exemple !


C'est partiellement vrai car il est possible de passer des variables depuis php dans une feuille XSLT et surtout il est possible d'exécuter des fonctions php en les déclarant dans la page php puis en les important dans la feuille xsl, ex :


Code : PHP
1
2
3
4
5
6
...
$xslt_une_annee -> importStylesheet($xsl_une_annee);
$xslt_une_annee -> setParameter(null,'annee',$annee); //ici une variable
$xslt_une_annee -> setParameter(null,'serveur',$serveur); //une autre variable
$xslt_une_annee -> registerPhpFunctions(); //passage de toutes les fonctions php déclarées plus haut dans la page
$contenu = $xslt_une_annee -> transformToXML($xml);


Ça c'était pour le php

Maintenant le xslt

Code : XML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
				xmlns:php="http://php.net/xsl"
				exclude-result-prefixes="php">
<!--remarquez la déclaration du namespace php --> 
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:param name="annee" /><!--récupération des variables du php-->
<xsl:param name="serveur" />
<xsl:strip-space elements="*"/>

<xsl:template match="/">
<xsl:for-each select="(//EXPOSITION/EVENEMENT|//EXPOSITION/CYCLE_EVENEMENTS|//EVENEMENTS_HORS_EXPOSITION/ANNEE/EVENEMENT|//EVENEMENTS_HORS_EXPOSITION/ANNEE/CYCLE_EVENEMENTS)[@ANNEE=$annee]">
<!--utilisation de la variable php $annee afin de générer du xml selon une requête faite par le visiteur -->
<xsl:sort select="@DEBUT" />
	<xsl:choose>
	<xsl:when test="parent::EXPOSITION">
		<h2>Dans le cadre de l'exposition 
		<a href="{$serveur}archives_des_expositions.php?page=exposition_unique&amp;id_exposition={php:functionString('dbl_urlencode',parent::EXPOSITION/@ID_EXPOSITION)}&amp;titre={php:functionString('dbl_urlencode',parent::EXPOSITION/@TITRE)}" >
<!--utilisation d'une variable $serveur pour créer un lien absolu et d'une fonction php maison dbl_urlencode pour encoder mes urls comme son nom l'indique -->
			<xsl:value-of select="parent::EXPOSITION/@TITRE" /><xsl:if test="parent::EXPOSITION/@SOUS_TITRE">, <em><xsl:value-of select="parent::EXPOSITION/@SOUS_TITRE" /></em></xsl:if></a>
		</h2>
	</xsl:when>
	<xsl:otherwise>
		<h2>Événement hors exposition</h2>
	</xsl:otherwise>
	</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


Voilà, donc effectivement on exécute pas directement du full code php dans xsl et ce mélange des langages se fait dans un contexte bien précis, via le processeur xsl de php. Mais cela démontre l'intérêt que peut avoir avoir d'éxecuter du xsl/xml dans php, car dans ce cas xml peut presque complètement remplacer SQL ce qui produit des sites beaucoup plus léger.

En tout cas merci pour ce tuto, qui reste à développer mais qui fait découvrir un langage très intéressant. :D
Hors ligne Chicobuarque # Posté le 26/08/2010 à 19:46:41

Ville : Nice
Pays : France métropolitaine

Citation : Radioxid
Si je ne trompe pas, le XSL correspond au CSS si le XML équivaut au HTML ?


Non, le xsl sert à manipuler, extraire, classer, transformer etc. des informations extraites d'une base de données XML, le terme feuille de style peut prêter à confusion.
Il est possible par exemple en XSL d'effectuer des opérations mathématiques, de transformer des chaînes de caractères, de vérifier des conditions, d'exécuter des boucles, d'utiliser des variables etc.

En bref c'est un langage de manipulation de données un peu comme SQL à la différence que l'output est différent de la source, et qu'on ne manipule pas des tables mais des arborescences. :)
Hors ligne jmlépanda # Posté le 26/08/2010 à 20:25:39
yop
Avatar

Si on veut se rapprocher du SQL il y a Xquery qui est plus adapter, Je pense que Xslt est avant tout un langage de transformation et non pas un langage de requete, le document XML est vue dans son ensemble et non pas vue comme une base de donnée.
Hors ligne anenonime # Posté le 28/08/2010 à 08:01:44

Excellent tutorial ... par contre je suis toujours une pipe concernant UTF8
Malgré mes déclarations <!ENTITY...etc. ça persiste à m'afficher les caractères à la con ! lol
Hors ligne Chicobuarque # Posté le 28/08/2010 à 16:31:04

Ville : Nice
Pays : France métropolitaine

@ Jmlependa : bien vu, c'est vrai que la comparaison avec Xquery est plus pertinente.

@ anenonime : je te renvoie à ce tuto du SDZ : Passer du latin 1 à l'unicode.
En plus de déclarer un encodage en utf-8 il faut que ton fichier lui-même soit enregistré en utf-8, dans Notepad++ par exemple tu as un menu "Format" et là tu cliques sur "Convertir en utf-8 (sans BOM)", pareil pour les fichiers qui se servent de ta feuille de style.
Hors ligne v1nCenT # Posté le 29/08/2010 à 10:43:01

Bonjour !

Je viens juste de terminer ce petit tuto', et de suite j'ai activé mon compte sur le site du ZérO, pour faire quelques remarques.

Alors oui, on peut juger que cette présentation est expéditive. Un mal pour un bien ! Fi des détails et des informations parasites, on va directement au concret.
Je rejoins dans cette logique l'image de l'exemple bien plus qu'un tutoriel complet.

Ceci dit, j'ai apprécié cet "exemple", qui m'a replongé avec joie dans le XSLT. Je ne me permettrais pas de faire des commentaires sur la rédaction, puisque je n'ai pas eu de difficulté de lecture. Je laisse le chipotage à d'autres zérOs.

Par contre je ferais quelques remarques sur le contenu en lui-même, en espérant que ça serve à l'auteur !

1) Explications des lignes "xsl:output" et "xsl:template" (début), qui me semblent partielles.
Tu as choisi "method='html'", mais tu pourrais parler des autres choix possibles plus en détail (et non en une phrase bien trop vague à mon goût)
En outre tu n'expliques pas que le "/" désigne la racine du document XML. C'est une information qui peut s'avérer utile pour un débutant !

2)Dans la partie "régions répétées", l'exemple 3.
Je me suis contenté de copier-coller dans mon fichier cet exemple..... mais il manque la balise fermante </xsl:for-each>. Un débutant peut se retrouver perdu !

3)Dans la partie "Commentaires", tu présentes une balise <xsl-comment>, mais pourquoi ne pas tout simplement utiliser "<!-- -->" ??? C'est utiliser en XHTML, en TEI ou tout autre format XML. Pourquoi changer quand on aborde les XSLT ?

Encore bravo pour ce travail, et bon courage pour une suite "XSLT EN MODE ULTRA BOURRIN" (avec des pointeurs XPATH de 3 lignes et des balises XSL dans tous les coins).
Hors ligne djaps # Posté le 25/01/2012 à 09:24:15
Avatar

Bonjour,

Une entité ne se déclare pas dans le fichier de transformation (.xsl) MAIS dans le fichier source à transformer (.xml)
Côté client, le remplacement de l'entité est automatique
Côté serveur, pour par exemple php5, il faut lui dire
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
   $xslDoc = new DOMDocument();
   $xslDoc->load("sommaire.xsl");

   $xmlDoc = new DOMDocument();
   $xmlDoc->substituteEntities = true; // avant de lire le document source
   $xmlDoc->load("chapitre.xml");

   $proc = new XSLTProcessor();
   $proc->importStylesheet($xslDoc);
   echo $proc->transformToXML($xmlDoc);
?>


David
 
Pour accéder à cette section
Connectez-vous !
connexion_rpx