Как передать входной параметр в файл 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