2
是否可以加载类似于加载代码块的XSL代码的外部块,例如aspx include? EG:加载XSL代码的外部块
<xsl:if test="$ShowNextButton='No'">
<!-- A Block of external code would be loaded here -->
</xsl:if>
我使用XSLT 1.0,如果有差别。
是否可以加载类似于加载代码块的XSL代码的外部块,例如aspx include? EG:加载XSL代码的外部块
<xsl:if test="$ShowNextButton='No'">
<!-- A Block of external code would be loaded here -->
</xsl:if>
我使用XSLT 1.0,如果有差别。
如果您的“外部XSL代码”块可以放在命名模板中,您可以轻松完成此操作。
下面是一个使用主XSLT样式表(base.xsl)并包含外部XSLT样式表(include.xsl)的通用示例。
input.xml中
<test>
<foo trigger-template="yes">
<bar>Original "bar".</bar>
</foo>
<foo trigger-template="no">
<bar>Original "bar".</bar>
</foo>
</test>
base.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="include.xsl"/>
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="foo">
<foo>
<xsl:if test="@trigger-template='yes'">
<xsl:call-template name="external-template">
<xsl:with-param name="statement" select="'Successfully called external XSL code!'"/>
</xsl:call-template>
</xsl:if>
<xsl:apply-templates/>
</foo>
</xsl:template>
</xsl:stylesheet>
include.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="external-template">
<xsl:param name="statement"/>
<bar><xsl:value-of select="$statement"/></bar>
</xsl:template>
</xsl:stylesheet>
output.xml
<test>
<foo>
<bar>Successfully called external XSL code!</bar>
<bar>Original "bar".</bar>
</foo>
<foo>
<bar>Original "bar".</bar>
</foo>
</test>
完美谢谢你的扩展答案! – brutusmaximus86 2014-02-13 08:13:15
以及您使用的是什么xslt解析器?如果存在,它将是一个特定的解析器功能。你可以用XSLT发明一些东西,它处理你的xslt,它包含一个节点,告诉你要合并的xslt ......棘手...... – rene 2012-02-15 13:44:40
对不起。我不确定我关注? xslt解析器是什么意思?对不起,我只是一个低端的开发者:) – 2012-02-15 13:47:28
@ user1001421:你需要熟悉XSLT'xsl:import'和'xsl:include'指令。但是,他们是无条件的。目前XSLT 1.0不允许动态条件包含。通过使用'use-when'属性,XSLT 2.0允许一些非常有限的条件编译时包含。 – 2012-02-15 13:57:50