Входной параметр в xslt - PullRequest
       2

Входной параметр в xslt

2 голосов
/ 12 декабря 2011

Как передать входной параметр в таблицу стилей XSLT? Я использую xsltproc, и я хотел бы использовать --stringparam <param> <value> в качестве аргумента, но я не знаю, как получить доступ к параметру внутри XSLT. Может кто-нибудь привести пример? Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 12 декабря 2011

Как передать входной параметр в файл xslt?

В XSLT любой global параметр (xsl:param, который является дочерним элементом верхнего элемента таблицы стилей XSLT) может иметь свое значение указано извне инициатором преобразования .

Способ настройки внешних параметров зависит от реализации и отличается от одного процессора XSLT к другому - прочитайте документацию по используемому вами XSLT-процессору.

Вот небольшой пример :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pDeletePos" select="3"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="num">
  <xsl:if test="not(position() = $pDeletePos)">
    <xsl:copy-of select="."/>
  </xsl:if>
 </xsl:template>
</xsl:stylesheet>

Здесь глобальный параметр с именем pDeletePos - позиция элемента num, который необходимо удалить.

Для этого параметра также указывается default value (3). Это значение будет использоваться, если инициатор преобразования не указывает параметр pDeletePos.

Когда вышеупомянутое преобразование применено к этому документу XML :

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>
</nums>

и если значение pDeletePos внешне задано как 5, преобразование дает следующий результат:

<nums>
   <num>01</num>
   <num>02</num>
   <num>03</num>
   <num>04</num>
   <num>06</num>
   <num>07</num>
   <num>08</num>
   <num>09</num>
   <num>10</num>
</nums>

Что касается внешней настройки параметра, то вот как это делается в C # при запуске XSLT-процессора XslCompiledTransform:

http://msdn.microsoft.com/en-us/library/system.xml.xsl.xsltargumentlist.addparam.aspx

3 голосов
/ 12 декабря 2011

Это я использую.Часть значения по умолчанию является необязательной.Вы должны иметь

  <xsl:param name="yourParamname"/>

.

<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <!-- default value -->
<xsl:variable name="defaultDeploymentMode">
    <xsl:text>test</xsl:text>
</xsl:variable>
<xsl:param name="deploymentMode" select="$defaultDeploymentMode"></xsl:param>



<xsl:template match="/">
    <data><xsl:value-of select="$deploymentMode"/>
           </data>
     </xsl:template>
...