Si vous voulez en savoir plus sur le langage XSL, je vous invite à consulter le site suivant: http://www.laltruiste.com/document.php?url=http://www.laltruiste.com/coursxsl/intro.html
Voici un exemple de fichier XML nommé ici certif.xml:
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet href="certif.xsl" type="text/xsl"?> <!DOCTYPE diplomes SYSTEM "http://www.foobar.com/dtd.dtd"> <diplomes> <parametres> <type-export>complet</type-export> <horodatage>31/08/2010 22:01:07</horodatage> </parametres> <fiche-diplome> <type-intervention>C</type-intervention> <code-diplome>1874</code-diplome> <code-type-diplome>105</code-type-diplome> <intitule-type-diplome>Mastère spécialisé</intitule-type-diplome> <code-niveau>1</code-niveau> <code-niveau-europeen /> <code-scolarite /> <code-sise>9730703</code-sise> <code-onisep /> <code-onisep-ideo /> <code-specificite-ideo /> <code-cqp /> <code-ministere-emploi /> <code-afpa /> <code-nsf>116</code-nsf> <code-lettre-nsf /> <code-carif-07 /> <code-carif-26 /> <inscrit-rncp>2</inscrit-rncp> <type-sigle>Mastère spécialisé</type-sigle> <type-complet>Mastère spécialisé</type-complet> <intitule-diplome>Mastère spécialisé mastère spécialisé chimie 'ts' ttt</intitule-diplome> <dominante>chimie</dominante> <mention /> <specialite /> <intitule-sigle /> <code-niveau-entree /> <accessibilite-fi /> <accessibilite-ca>2</accessibilite-ca> <accessibilite-fc>2</accessibilite-fc> <accessibilite-cp>2</accessibilite-cp> <accessibilite-vae>1</accessibilite-vae> <accessibilite-ind>2</accessibilite-ind> <accessibilite-uc /> <texte-chapo /> <texte-objectif /> <texte-programme /> <texte-admission /> <texte-poursuite /> <texte-debouches /> <texte-source /> <valideur /> <annee-premiere-session>2002</annee-premiere-session> <annee-derniere-session /> <etat>3</etat> <date-creation>11/02/2004</date-creation> <date-maj>11/02/2004</date-maj> <validation-interne /> <validation-alfa /> <modalites-diplomes> <modalite> <code-type-modalite>2</code-type-modalite> <code-modalite>5</code-modalite> <libelle>Label de la Conférence des grandes écoles (CGE)</libelle> </modalite> </modalites-diplomes> <jos> </jos> <modules> </modules> <liens-diplomes-formacodes> </liens-diplomes-formacodes> <liens-diplomes-gfe> </liens-diplomes-gfe> <liens-diplomes-romes> </liens-diplomes-romes> <liens-diplomes-fap> </liens-diplomes-fap> <liens-diplomes-validations> <lien-diplomes-validations> <code-validation>1015</code-validation> <nom-validation>Diplôme de la recherche</nom-validation> <certificateur>1</certificateur> <valideur /> <code-habilitation /> <code-rncp /> <duree-habilitation /> <date-ouverture>00/00/0000</date-ouverture> <date-fermeture>00/00/0000</date-fermeture> <validite-actuelle /> <date-maj>01/01/2007</date-maj> </lien-diplomes-validations> </liens-diplomes-validations> <historiques-diplomes> </historiques-diplomes> </fiche-diplome> </diplomes>
Voici le code XSL permettant de transformer les données provenant de notre fichier XML.
Dans notre cas, nous voulons récupérer les colonnes suivantes code, code_type, nom, nom_certificateur, code_validation, type_certification. et les mettre dans une table diplome.
Nous voulons aussi nettoyer les données des apostrophes.
Voici le fichier : certif.xsl
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="apostrophe">'</xsl:param> <xsl:template name="cleanQuote"> <xsl:param name="string" /> <xsl:if test="contains($string, $apostrophe)"><xsl:value-of select="substring-before($string, $apostrophe)" />''<xsl:call-template name="cleanQuote"><xsl:with-param name="string"><xsl:value-of select="substring-after($string, $apostrophe)" /></xsl:with-param></xsl:call-template></xsl:if> <xsl:if test="not(contains($string, $apostrophe))"><xsl:value-of select="$string" /></xsl:if> </xsl:template> <xsl:template match="diplomes/parametres"/> <xsl:template match="diplomes/fiche-diplome"> <xsl:text> INSERT INTO diplome (code, code_type, nom, nom_certificateur, code_validation, type_certification) VALUES ( </xsl:text> <xsl:value-of select="code-diplome"/> <xsl:text>, </xsl:text> <xsl:value-of select="code-type-diplome"/> <xsl:text>, '</xsl:text> <xsl:call-template name="cleanQuote"><xsl:with-param name="string"><xsl:value-of select="intitule-diplome"/></xsl:with-param></xsl:call-template> <xsl:text>', '</xsl:text> <xsl:call-template name="cleanQuote"><xsl:with-param name="string"><xsl:value-of select="liens-diplomes-validations/lien-diplomes-validations/nom-validation"/></xsl:with-param></xsl:call-template> <xsl:text>', </xsl:text> <xsl:value-of select="liens-diplomes-validations/lien-diplomes-validations/code-validation"/> <xsl:text>, '</xsl:text> <xsl:call-template name="cleanQuote"><xsl:with-param name="string"><xsl:value-of select="intitule-type-diplome"/></xsl:with-param></xsl:call-template> <xsl:text>' </xsl:text> <xsl:text>);</xsl:text><br/> </xsl:template> </xsl:stylesheet>
Lorsque notre fichier XSL est créé, il nous faut rajouter cette ligne dans le fichier certif.xml
<?xml-stylesheet href="certif.xsl" type="text/xsl"?>
On appelle alors notre fichier certif.xml dans un navigateur comme Internet Explorer ou Firefox.
Voici le code obtenu.
INSERT INTO diplome (code, code_type, nom, nom_certificateur, code_validation, type_certification) VALUES ( 1874, 105, 'Mastère spécialisé mastère spécialisé chimie ''ts'' ttt', 'Diplôme de la recherche', 1015, 'Mastère spécialisé' );
Il ne nous reste plus qu'à créer une table diplome dans notre base de données et à exécuter le code obtenu pour mettre à jour notre table.
CREATE TABLE diplome ( code character varying(255), code_type character varying(255), nom character varying(255), nom_certificateur character varying(255), code_validation character varying(255), type_certification character varying(255) );
Si vous connaissez d'autres techniques n'hésitez pas à poster un commentaire.
Commentaires
Existe t'il des outils IDE permettant de nous faciliter la tache de création / debugging de fichier XSL ?
Que conseillez vous comme site de tutorial sur XSL ?
Méthode assez original et assez poussée..
Personnellement j'aurais dégainé PHP pour générer un dump SQL.. Mais tout se tient.. Sympathique article.
S.
@aloe-vera : tu peux utiliser OxygenXML pour la creation des fichiers XSL. Il existe en version plug-in pour Eclipse ou en standalone. C'est tres puissant, mais payant (mais une version d'eval 30j existe bien). Moi je l'utilise tous les jours.
Pour les sites XSL . j'ai mis en favoris cela :
http://www.laltruiste.com/document....
http://www.lehtml.com/xml/xsl_order...
XML Copy Editor est une alternative libre crédible à OxygenXML sur ce point précis :
http://xml-copy-editor.sourceforge....
(Windows & Ubuntu)
menu XML / Transformation XSL… [F8]
perso j'utilise aussi OxygenXML pour la creation des fichiers XSL,et je m'en plaint pas!mais je suis quand meme passé par la version d'essai au début!
Cela a été fantastique. Merci de m'avoir aidé à ce sujet. Il est vraiment utile pour moi.
Essayez de plug-in pour Eclipse. Je n'ai pas utilisé moi-même, mais mon ami est souvent recouru à son aide.