Définition de paramètres avec XSLT
Pour utiliser des paramètres dans une feuille de style XSLT, vous devez les déclarer en tant que paramètres globaux dans la feuille de style elle-même.
Procédure
- Utilisez l'attribut "as" pour déclarer un type pour le paramètre. La feuille de style suivante déclare deux paramètres et affecte un type à l'un deux de manière explicite.
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:param name="targetDate" as="xs:date"/> <xsl:param name="window" select="3"/> <xsl:template match="/"> <table> <tr><td>Task</td><td>Due</td><td>Status</td></tr> <xsl:apply-templates select="todo-list/task[xs:date(@due) le $targetDate + xs:dayTimeDuration(concat('P', $window, 'D'))]"> <xsl:sort select="@due"/> </xsl:apply-templates> </table> </xsl:template> <xsl:template match="task"> <tr> <td><xsl:value-of select="."/></td> <td><xsl:value-of select="format-date(xs:date(@due), '[MNn] [D1o]')"/></td> <td> <xsl:choose> <xsl:when test="xs:date(@due) lt $targetDate">OVERDUE by <xsl:value-of select="days-from-duration($targetDate - xs:date(@due))"/> day(s)</xsl:when> <xsl:otherwise>Due in <xsl:value-of select="days-from-duration(xs:date(@due) - $targetDate)"/> day(s)</xsl:otherwise> </xsl:choose> </td> </tr> </xsl:template> </xsl:stylesheet>
- Préparez une feuille de style XSLT avec des paramètres globaux comme pour une feuille de style habituelle. Vous n'avez rien à déclarer dans le contexte statique. Supposons que cette feuille de style est disponible avec l'objet source xsltSource, le code suivant prépare la feuille de style.
// Create the factory XFactory factory = XFactory.newInstance(); // Prepare the XSLT stylesheet XSLTExecutable xslt = factory.prepareXSLT(xsltSource);
- Pour exécuter une feuille de style XSLT qui utilise des paramètres, indiquez (ou associez) des valeurs à chaque paramètre à l'aide d'une instance XDynamicContext.
Vous devez fournir une valeur pour tous les paramètres obligatoires, sans quoi une erreur est générée. Pour les autres paramètres, si vous n'indiquez pas de valeur, une valeur par défaut est appliquée ; il s'agira d'une valeur fournie dans la feuille de style ou d'une chaîne de longueur nulle.
L'interface XDynamicContext contient plusieurs méthodes bind, bindItem et bindSequence. Chacune de ces méthodes utilise deux paramètres dont le premier est un objet QName correspondant au nom du paramètre et le deuxième est la valeur associée.Tableau 1. Méthodes bind, bindItem et bindSequence de XDynamicContext. Le tableau suivant décrit quand il convient d'utiliser chaque forme des méthodes bind, bindItem et bindSequence de l'interface XDynamicContext.
Méthode Fonction bind Utilisez cette méthode pour associer une valeur atomique unique. Il existe une forme spécifique de cette méthode pour chacun des types Java™ utilisés dans le mappage standard entre les types intégrés et les types Java. Il existe aussi deux formes supplémentaires dont l'une utilise un objet noeud et l'autre un objet source. Ces deux formes de la méthode servent respectivement à associer un noeud d'une arborescence DOM et à analyser une nouvelle source pour obtenir un noeud de document.
bindItem Utilisez cette méthode pour associer un élément unique en tant qu'objet XItemView. Vous pouvez obtenir un objet XItemView en tant que résultat de l'exécution d'une expression ou le construire avec une instance XItemFactory.
bindSequence Utilisez cette méthode pour associer des séquences contenant zéro ou plusieurs éléments (mais pas un seul). Il existe une forme spécifique de cette méthode pour chacun des types Java utilisés dans le mappage standard entre les types intégrés et les types Java. Chaque forme demande un tableau de valeurs du type requis.
Il existe une forme supplémentaire de cette méthode qui utilise un objet XSequenceCursor. Vous pouvez obtenir un objet XSequenceCursor en tant que résultat de l'exécution d'une expression ou le construire avec une instance XItemFactory.
L'exemple suivant montre comment exécuter la feuille de style préparée dans le premier exemple. Le code commence par associer des valeurs à chaque paramètre qu'il utilisera. Notez qu'un objet résultat appelé xsltResult a été créé préalablement.// Create an xs:date value for the "targetDate" parameter with date "April 10, 2009" XMLGregorianCalendar date = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(2009, 4, 10, DatatypeConstants.FIELD_UNDEFINED); // Create a new dynamic context from the factory XDynamicContext dynamicContext = factory.newDynamicContext(); // Bind an atomic value for the "targetDate" parameter dynamicContext.bind(new QName("targetDate"), date); // Bind an atomic value for the "window" parameter dynamicContext.bind(new QName("window"), 7); // Create an XML input document String xml = "<todo-list>" + "<task due='2009-03-31' completed=''>File Quarterly Report</task>" + "<task due='2009-05-04' completed='2009-04-22'>Review candidate resumes</task> + "<task due='2009-04-16' completed=''>Order stock</task>" + "<task due='2009-05-01' completed=''>Buy concert tickets</task>" + "</todo-list>"; StreamSource source = new StreamSource(new StringReader(xml)); // Execute the stylesheet xslt.execute(source, dynamicContext, xsltResult);


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_params_xslt
Nom du fichier : txml_params_xslt.html