Est-il possible de transmettre un paramètre à XSLT via une URL lorsque vous utilisez un navigateur pour transformer XML?
Question
Lors de l'utilisation d'un navigateur pour transformer XML (Google Chrome ou IE7), est-il possible de transmettre un paramètre à la feuille de style XSLT via l'URL?
exemple:
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>
sample.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>
La solution
Vous pouvez générer le côté serveur XSLT, même si la transformation est côté client.
Ceci vous permet d'utiliser un script dynamique pour gérer le paramètre.
Par exemple, vous pouvez spécifier:
<?xml-stylesheet type="text/xsl"href="/myscript.cfm/sample.xsl?paramter=something" ?>
Ensuite, dans myscript.cfm, vous devez générer le fichier XSL, mais avec un script dynamique gérant le paramètre de chaîne de requête (cela dépend du langage de script que vous utilisez).
Autres conseils
Malheureusement, non, vous ne pouvez pas transmettre de paramètres au XSLT côté client uniquement. Le navigateur Web prend les instructions de traitement du fichier XML; et le transforme directement avec le XSLT.
Il est possible de transmettre des valeurs via l'URL de chaîne de requête, puis de les lire dynamiquement à l'aide de JavaScript. Cependant, elles ne seraient pas disponibles dans le XSLT (expressions XPath) - car le navigateur a déjà transformé le XML / XSLT. Ils ne peuvent être utilisés que dans la sortie HTML rendue.
Ajoutez simplement le paramètre en tant qu'attribut au fichier source XML et utilisez-le comme attribut à la feuille de style.
xmlDoc.documentElement.setAttribute("myparam",getParameter("myparam"))
Et la fonction JavaScript est la suivante:
//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";
}
}