2008-09-15 16 views
14

Al usar un navegador para transformar XML (Google Chrome o IE7), ¿es posible pasar un parámetro a la hoja de estilos XSLT a través de la URL?¿Es posible pasar un parámetro a XSLT a través de una URL cuando se usa un navegador para transformar XML?

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> 

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> 

Respuesta

3

se puede generar el lado del servidor XSLT, incluso si la transformación es cliente- lado.

Esto le permite utilizar un script dinámico para manejar el parámetro.

Por ejemplo, puede especificar:

<?xml-stylesheet type="text/xsl"href="/myscript.cfm/sample.xsl?paramter=something" ?> 

Y luego, en myscript.cfm que le imprima el archivo XSL, pero con el manejo de la escritura dinámica del parámetro de cadena de consulta (esto podría variar dependiendo de qué lenguaje de script que utilizar).

+4

La segunda parte de la pregunta sería ¿es posible solamente del lado del cliente? – user9547

6

Desafortunadamente, no, no puede pasar los parámetros al XSLT solo en el lado del cliente. El navegador web toma las instrucciones de procesamiento del XML; y lo transforma directamente con XSLT.


Es posible pasar valores a través de la URL de la cadena de consulta y luego leerlos dinámicamente mediante JavaScript. Sin embargo, estos no estarían disponibles para su uso en XSLT (expresiones XPath), ya que el navegador ya ha transformado el XML/XSLT. Solo se podían usar en la salida HTML renderizada.

6

Simplemente agregue el parámetro como un atributo al archivo fuente XML y úselo como un atributo con la hoja de estilo.

xmlDoc.documentElement.setAttribute("myparam",getParameter("myparam")) 

Y la función de JavaScript es el 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"; 
    } 
} 
Cuestiones relacionadas