Es posible pasar de un parámetro a XSLT a través de una dirección URL cuando se utiliza un navegador para transformar XML?
Pregunta
Cuando se utiliza un navegador para transformar XML (Google Chrome o IE7) es posible pasar de un parámetro a la hoja de estilos XSLT a través de la URL?
ejemplo:
data.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sample.xsl"?>
<root>
<document type="resume">
<author>John Doe</author>
</document>
<document type="novella">
<author>Jane Doe</author>
</document>
</root>
de la muestra.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="html" />
<xsl:template match="/">
<xsl:param name="doctype" />
<html>
<head>
<title>List of <xsl:value-of select="$doctype" /></title>
</head>
<body>
<xsl:for-each select="//document[@type = $doctype]">
<p><xsl:value-of select="author" /></p>
</xsl:for-each>
</body>
</html>
</<xsl:stylesheet>
Solución
Puede generar la transformación xsl en el lado del servidor, incluso si la transformación es del lado del cliente.
Esto le permite utilizar un guión dinámico para controlar el parámetro.
Por ejemplo, puede especificar:
<?xml-stylesheet type="text/xsl"href="/myscript.cfm/sample.xsl?paramter=something" ?>
Y, a continuación, en myscript.cfm se generará el archivo XSL, pero con la dinámica de secuencia de comandos de manejo el parámetro de cadena de consulta (esto varía dependiendo del lenguaje de secuencias de comandos que utilice).
Otros consejos
Lamentablemente, no hay - no puede pasar a través de los parámetros de la transformación xsl en el lado del cliente solamente.El navegador web se lleva las instrucciones de procesamiento de XML;y directamente se transforma con el XSLT.
Es posible pasar valores a través de la cadena de consulta de la URL y, a continuación, lea dinámicamente mediante JavaScript.Sin embargo, estos no estarán disponibles para su uso en el XSLT (expresiones XPath) - como el navegador ya ha transformado el XML/XSLT.Sólo podían ser utilizados en el renderizado de HTML de salida.
Simplemente añada el parámetro como un atributo en el archivo XML de origen y lo utilizan como un attibute con la hoja de estilos.
xmlDoc.documentElement.setAttribute("myparam",getParameter("myparam"))
Y la función de JavaScript es la siguiente:
//Get querystring request paramter in javascript
function getParameter (parameterName ) {
var queryString = window.top.location.search.substring(1);
// Add "=" to the parameter name (i.e. parameterName=value)
var parameterName = parameterName + "=";
if ( queryString.length > 0 ) {
// Find the beginning of the string
begin = queryString.indexOf ( parameterName );
// If the parameter name is not found, skip it, otherwise return the value
if ( begin != -1 ) {
// Add the length (integer) to the beginning
begin += parameterName.length;
// Multiple parameters are separated by the "&" sign
end = queryString.indexOf ( "&" , begin );
if ( end == -1 ) {
end = queryString.length
}
// Return the string
return unescape ( queryString.substring ( begin, end ) );
}
// Return "null" if no parameter has been found
return "null";
}
}