2008-09-15 15 views
14

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?Est-il possible de passer un paramètre à XSLT via une URL lors de l'utilisation d'un navigateur pour transformer XML?

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> 

Répondre

3

Vous pouvez générer le côté serveur XSLT, même si la transformation est client- côté.

Cela 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" ?> 

Et puis dans myscript.cfm vous sortie le fichier XSL, mais avec le script dynamique manipuler le paramètre de chaîne de requête (ce qui varie selon que vous langage de script utilisation).

+4

La deuxième partie de la question serait est-il possible côté client seulement? – user9547

6

Malheureusement, non - vous ne pouvez pas transmettre les paramètres au client XSLT uniquement du côté client. Le navigateur Web prend les instructions de traitement à partir du 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 de façon dynamique à l'aide de JavaScript. Cependant, ceux-ci ne seraient pas disponibles dans le XSLT (expressions XPath) - car le navigateur a déjà transformé le XML/XSLT. Ils ne pouvaient être utilisés que dans la sortie HTML rendue.

6

Ajoutez simplement le paramètre en tant qu'attribut au fichier source XML et utilisez-le en tant qu'attribut avec 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"; 
    } 
}