Как передать параметры в XSLT? - PullRequest
5 голосов
/ 15 июля 2010

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

У меня есть 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?

1 Ответ

7 голосов
/ 15 июля 2010

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

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

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

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

...