Est-il possible de transmettre un paramètre à XSLT via une URL lorsque vous utilisez un navigateur pour transformer XML?

StackOverflow https://stackoverflow.com/questions/65926

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>
Était-ce utile?

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";
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top