如何将输入参数传递给 XSLT 样式表?我正在使用 xsltproc,我想--stringparam <param> <value>用作参数,但我不知道如何访问 XSLT 中的参数。有人可以举个例子吗?提前致谢。
这是我正在使用的一个。默认值部分是可选的。你必须有一个
<xsl:param name="yourParamname"/>
Run Code Online (Sandbox Code Playgroud)
。
<?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>
Run Code Online (Sandbox Code Playgroud)
如何为 xslt 文件提供输入参数?
在 XSLT 中,任何 全局 参数(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>
Run Code Online (Sandbox Code Playgroud)
这里,全局参数命名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>
Run Code Online (Sandbox Code Playgroud)
如果 的值在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>
Run Code Online (Sandbox Code Playgroud)
至于在外部设置参数,这是在 C# 中启动 XslCompiledTransform XSLT 处理器时如何完成的:
http://msdn.microsoft.com/en-us/library/system.xml.xsl.xsltargumentlist.addparam.aspx
| 归档时间: |
|
| 查看次数: |
10646 次 |
| 最近记录: |