Можно ли передать параметр в XSLT через URL-адрес при использовании браузера для преобразования XML?

При использовании браузера для преобразования XML (Google Chrome или IE7) можно ли передать параметр в таблицу стилей XSLT через URL-адрес?

пример:

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>

person user9547    schedule 15.09.2008    source источник


Ответы (3)


Вы можете сгенерировать XSLT на стороне сервера, даже если преобразование выполняется на стороне клиента.

Это позволяет вам использовать динамический сценарий для обработки параметра.

Например, вы можете указать:

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

А затем в myscript.cfm вы должны вывести файл XSL, но с динамическим сценарием, обрабатывающим параметр строки запроса (это зависит от того, какой язык сценариев вы используете).

person Peter Boughton    schedule 15.09.2008
comment
Вторая часть вопроса: возможно ли это только на стороне клиента? - person user9547; 16.09.2008

К сожалению, нет — вы не можете передавать параметры в XSLT только на стороне клиента. Веб-браузер берет инструкции по обработке из XML; и напрямую преобразует его с помощью XSLT.


Можно передавать значения через URL-адрес строки запроса, а затем читать их динамически с помощью JavaScript. Однако они не будут доступны для использования в XSLT (выражения XPath), так как браузер уже преобразовал XML/XSLT. Их можно было использовать только в отображаемом HTML-выводе.

person leekelleher    schedule 16.09.2008

Просто добавьте параметр в качестве атрибута в исходный файл XML и используйте его в качестве атрибута с таблицей стилей.

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

И функция JavaScript выглядит следующим образом:

//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";
   }
}
person Tawani    schedule 11.03.2009