Как передать параметры XSLT?

У меня есть проблема.

У меня есть XML-файл, который содержит информацию приблизительно 100 курсов.

У меня есть файл XSL, который приятно отображает список 100 курсов.

Но что, если я хочу только отобразить 1 курс. Я могу передать параметр файлу XSLT, чтобы сказать этому только отображать "ENGL 100"?

XML выглядит примерно так:

<document>
<menu>
   <item>
      <name>MTH 300</name>
      <brief>Mathematics Skill Development</brief>
      <description>A course in the fundamentals of ...</description>
   </item>
   <item>
      <name>MTH 301</name>
      <brief>Basic Algebra</brief>
      <description>An introduction to algebra, ...</description>
   </item>
 ...

Я знаю, что мог записать файл XSLT, названный "eng100.xsl", чтобы циклично выполниться через XML и отобразить только ENG 100, но я не хочу должным быть писать десятки этих файлов.

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

Там какой-либо путь состоит в том, чтобы передать параметры в XSLT?

5
задан John Saunders 14 July 2010 в 22:50
поделиться

1 ответ

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

Вы объявляете параметры с помощью

  <xsl:param name="courseName" select"initialValue"/>

Затем вы можете проверить этот параметр в XSLT и вызвать другой шаблон в зависимости от его значения. Например, если параметр пуст, то вызывается текущий шаблон, который обрабатывает все элементы, в противном случае вызывается шаблон, который обрабатывает элементы только тогда, когда имя элемента равно значению параметра. Это можно сделать с помощью теста

   <xsl:template match="item">
      <xsl:if test="$courseName=name(./name)">
         <xsl:call-template name="yourOriginalTemplate"/>
      </xsl:if>
   </xsl:template>

Но, фильтруя и форматируя, вы смешиваете две проблемы в одном файле. Я бы отделил отбор XML-элементов от форматирования - заведите для этого два xslt-файла и запускайте их как конвейер.

7
ответ дан 14 December 2019 в 08:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: