正在加载XSL代码的外部块



是否可以加载外部XSL代码块,类似于在中加载代码块的方式,例如aspx-include?例如:

    <xsl:if test="$ShowNextButton='No'">
        <!-- A Block of external code would be loaded here -->
    </xsl:if>

如果有区别的话,我会使用XSLT1.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>

相关内容

  • 没有找到相关文章

最新更新