В вашем xsl создайте xsl:parameter
вверху перед всеми вашими шаблонами.
<xsl:parameter name="showdate"/>
Теперь вы можете рассматривать это как переменную: -
<xsl:when test="@date = $showdate">
Для передачи параметра необходимо использовать объект процессора XSL, который позволяет добавить параметр перед обработкой. В свою очередь вы получаете процессор из экземпляра объекта шаблона XSL. В свою очередь, вам необходим FreeThreadedDOMDocument, чтобы назначить параметру таблицы стилей шаблоны. Следовательно, код более сложный: -
Dim xsl : Set xsl = CreateObject("MSXML2.FreeThreadedDOMDocument.3.0")
xsl.async = false
xsl.load xslFile
Dim xml : Set xml = CreateObject("MSXML2.DOMDocument.3.0")
xml.async = false
xml.load sourceFile
Dim xslTemplate : Set xslTemplate = CreateObject("MSXML2.XSLTemplate.3.0")
xslTemplate.stylesheet = xsl;
Dim processor : Set processor = xslTemplate.createProcessor()
processor.addParameter "showDate", "20091203"
processor.input = source
processor.transform()
Response.Write processor.output
Соблазнительно назначить объект Response выходному параметру процессора, который работает достаточно хорошо и более эффективно. Однако недавние пакеты обновления MSXML сделали такую технику несовместимой с реализацией ASP IStream в объекте Response.
Так вот, как вы делаете это официально, как я обычно делаю, это вставляю какой-то произвольный атрибут в корневой узел исходного XML-файла и затем использую переменную: -
xml.documentElement.setAttribute("_showDate", "20091203")
Теперь вы можете использовать переменную вместо параметра внутри вашего основного шаблона: -
<xsl:template match="rota">
<xsl:variable name="showdate" select="@_showDate" />
<html> ...
<xsl:when test="@date = $showdate">
В этом подходе вы можете использовать уже используемый код преобразования, который намного проще.