Skip to main content

XSLT Extreme

Dernière session en direct de ce TechEd 2007 à Barcelone, "XSLT Extreme" par Dave McMahon. Il s'agit encore une fois de mes notes non retraitées, brutes de fonderie. Mais vous savez... Il s'agit d'une session pour ceux qui connaissent XSLT 1.0, XPath 1.0 et le .NET Framework. Accrochez-vous, nous allons secouer XSLT pour en faire de nombreuses choses!

Pourquoi XSLT?

Pour:

  • avoir un design propre, en séparant le contenu et l'apparence
  • simplifier le développement, notamment les transformations de données XML
  • simplifier le déploiement, car on peut travailler par simple copie avec XSLT
  • simplifier la maintenance et les mises à jour

Scénarios:

  • B2B: par exemple BizTalk
  • Sites Web pour avoir une architecture très légère
  • Sites Web sans base de données (par exemple pour réduire les coûts d'hébergement)
  • Liaison entre pages XAML simple et des données

Le langage

Il est

  • compact: 18 à 20 éléments dans la V1.0 seulement.
  • déclaratif, et c'est la mode en ce moment (WPF, WCF, XSL).
  • fonctionnel, du même genre que F# (bien qu'XSLT soit domain-specific).
  • extensible, et c'est ce que nous allons voir dans cette session.

XSLT dans le Framework 2.0

  • XslCompiledTransform: mieux que XslTransform du 1.0 en termes de performance
  • XsltArgumentList: permet de passer des paramètres lors d'une transformation de document et aussi d'étendre le langage
  • XsltSettings: plutôt pour la sécurité
  • XmlUrlResolver/XmlSecureResolver: permet de trouver les références aux documents externes

Premiers pas

Il n'est pas besoin de donner un template. En plaçant simplement <xsl:output>, le template par défaut est appliqué.

En ajoutant un template pour un élément, l'élément n'est plus traité par le template par défaut. Si notre template est vide, l'élément concerné n'apparaît plus.

En mettant un template vide sur "/" on bloque le template par défaut, ce qui évite de récupérer des "leftovers" que l'on aurait oublié.

<xsl:call-template> permet d'avoir une sorte d'include.

<xsl:apply-templates> permet d'appliquer les autres templates à partir du point où il est placé.

Note: avec Visual Studio 2005, on peut mettre une point d'arrêt dans le XSL, et le débogueur passe dans le XSL plus le XML!

Fournir autre chose que du XML en entrée du XSLT

Rien n'oblige à ce que l'entrée soit du XML. XSLT décrit en fait ce qu'on peut récupérer par des expressions XPath. Ce qui en .NET peut être toute chose qui implémente IXPathNavigable. Par exemple du CSV ou même un système de fichiers.

IXPathNavigable représente en fait un curseur, avec des instructions MoveToNext, MoveToPrevious.

Traitement

Scripting

Par exemple pour calculer la moyenne de plusieurs éléments (il n'y a pas de fonction pour calculer la moyenne en XSLT).

Pour cela, on:

  • utilise un XsltSettings, que l'on passe au Load du XslTransform.
  • ajoute un script dans le XSLT (en JavaScript, C#, VB, ...)
  • utilise l'élément <xsl:variable> puis la fonction XSLT FormatValue
  • Pour les nombres, il faut ajouter xsl:decimal-format

Conseil: mieux vaut faire des choses simples avec le scripting.

Sources multiples

  • avec <xsl:variable> on stocke une référence vers le document XML à inclure.
  • un <xsl:value-of> peut référencer la "variable" avec un select="$nom-variable/chemin".

Utiliser les événements

XSLT est assez difficile à déboguer. Message peut aider.

On utilise le <xsl:message>, qui envoie la sortie au processeur.

Sur XsltArgument on a un événement XsltMessageEncountered qui est appelé à chaque fois que l'élement <xsl:message> est atteint. Ce qui nous permet de récupérer le message pour le tracer et donc aider le débogage.

Extension du XSLT avec du code managé

Il suffit d'ajouter n'importe quelle classe .NET (pas d'interface à implémenter) et de l'ajouter en appelant la méthode AddExtensionObject aux XsltSettings et en fournissant un espace de nommage pour cette extension.

Sortie

On peut facilement sortir du XML, par exemple un flux RSS.

Faire sortir du CSV est tout aussi simple.

Pour faire sortir du Word, on peut par exemple produire du RTF. Mais on peut produire du WordML, ce qui fonctionne à partir de Word 2003. Pour ne pas transpirer dans la création du WordML, on peut simplement créer un document sous Word et le sauver en WordML, pour récupérer la base de notre XSLT.

Pour finir, on peut bien entendu produire du XAML. Dave McMahon nous montre dans une démonstration comment produire une interface en XAML (ici une ListView affichant les données sous forme d'un tableau). Grâce au XmlDataProvider, on peut binder les contrôles XAML au XML qui est fourni au XSLT.

Comments

Popular posts from this blog

Vue semaine gratuite pour Windows Phone 7.5

J’ai le plaisir d’annoncer la disponibilité sur le marketplace de mon application Free Week Calendar . C’est la première application gratuite à vous fournir une vue semaine de vos rendez-vous. L’utilisation est aussi simple que fluide. Par défaut vos rendez-vous de la semaine courante sont affichés (les copies d’écran sont en anglais mais l’application est intégralement localisée en français): En glissant le doigt à gauche ou à droite vous obtenez la semaine suivante ou précédente. En écartant les doigts vous zoomez sur vos rendez-vous, et en les rapprochant vous revenez à la vue globale. Contrairement à d’autres applications, celle-ci est entièrement localisée pour fonctionner en français et respecter le lundi comme premier jour de la semaine. P.S: merci à l’ Accélérateur Windows Phone et Dalhia pour leur aide. Sans eux cette application aurait mis plus de temps à sortir.

Tutoriel: Insérer un flux RSS dans une page ASP.net

Nous allons ici voir comment rapidement incorporer un flux RSS dans un formulaire Web ASP.net. Plus exactement, nous allons nous abonner à un flux Atom. Le but est d'afficher en tant que HTML les titres des entrées du flux, avec les liens vers les articles, et d'incorporer le tout au formulaire Web, comme je le fais sur ma page: Dans cet exemple, nous prendrons le flux RSS provenant de l'URL http://arnaudweil.blogspot.com/rss.xml . Puisque le RSS est du XML , nous allons facilement pouvoir le transformer en HTML grâce au contrôle ASP.net Xml et à une transformation XSLT . Dans ma page blog.aspx, j'écris donc: <asp:Xml ID="Xml1" runat="server" TransformSource="~/rss2table.xsl" /> Il me faut ensuite créer la transormation XSLT. J'ajoute donc à la racine de mon site un fichier rss2table.xsl avec le contenu suivant (cliquez avec le bouton droit sur le nom du projet dans l'Explorateur de Solutions de Visual Studio et ch...

Gift idea : help your loved ones take their IT skills to the next level

You surely know a special person who works in IT. Learn Kubernetes & Docker enables them to quickly ramp up on those two technologies that one doesn't want to miss in 2021. With smoother operations, better scaling and availability, DevOps tooling, containers and containers orchestration smartly solve many problems that developers and system administrators commonly face. Don't let your loved ones face problems in their IT job : offer them the book that takes them from zero to productive in a matter of days. Grab it now! Get the ebook from Leanpub , Amazon or choose from many retailers . Get the print edition from Lulu .