Establecimiento de parámetros con XSLT
Para utilizar parámetros en una hoja de estilo XSLT, declare los parámetros como parámetros globales en la propia hoja de estilo.
Procedimiento
- Utilice el atributo as para declarar un tipo para el parámetro. La hoja de estilo siguiente declara dos parámetros, confiriéndole a uno de ellos un tipo de forma explícita.
<?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>
- Prepare una hoja de estilo XSLT con parámetros globales exactamente de la misma forma que cualquier otra hoja de estilo porque no es necesario declarar nada en el contexto estático. Suponiendo que esta hoja de estilo está disponible utilizando el objeto xsltSource Source, el código siguiente prepara la hoja de estilo.
// Create the factory XFactory factory = XFactory.newInstance(); // Prepare the XSLT stylesheet XSLTExecutable xslt = factory.prepareXSLT(xsltSource);
- Para ejecutar una hoja de estilo XSLT que utilice parámetros, proporcione (o enlace) valores para cada parámetro utilizando una instancia
XDynamicContext.
Debe proporcionar un valor para los parámetros necesario o se generará un error. Para otros parámetros, si no proporciona ningún valor, se utilizará un valor predeterminado, ya sea el que se ha proporcionado en la hoja de estilo o una serie de longitud cero.
XDynamicContext tiene una cantidad de métodos bind, bindItem y bindSequence. Cada uno tiene dos parámetros, siendo el primero un objeto QName correspondiente al nombre del parámetro y el segundo un valor.Tabla 1. Métodos bind, bindItem y bindSequence de XDynamicContext. En la tabla siguiente se explica cuándo se utiliza cada forma de los métodos bind, bindItem y bindSequence de XDynamicContext.
Método Finalidad bind Se utiliza cuando se enlaza a un valor atómico simple Hay una forma de este método para cada tipo Java™ que se utilice en la correlación estándar de tipos incorporados para tipos Java. Hay dos formas adicionales: una que toma un objeto Node y otra que toma un objeto Source. Se utilizan para enlazar un nodo de un árbol DOM y analizar un origen nuevo para obtener un nodo de documentos, respectivamente.
bindItem Se utiliza cuando se enlaza un elemento simple a un objeto XItemView Un objeto XItemView se puede obtener del resultado de ejecutar otra expresión o se puede construir utilizando una instancia XItemFactory.
bindSequence Se utiliza cuando se enlazan secuencias menores o mayores que un elemento Hay una forma de este método para cada tipo Java que se utilice en la correlación estándar de tipos incorporados para tipos Java; cada uno de ellos acepta una matriz de valores del tipo indicado.
Hay una forma adicional que toma XSequenceCursor. XSequenceCursor puede ser el resultado de ejecutar otra expresión o se puede construir utilizando una instancia XItemFactory.
El ejemplo siguiente ejecuta la hoja de estilo XSLT preparada en el primer ejemplo, enlazando primero los valores para cada uno de los parámetros que se van a utilizar. Se supone que ya se ha creado un objeto Result denominado xsltResult.// 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
File name: txml_params_xslt.html