2012-02-15 49 views
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,如果有差別。

+0

以及您使用的是什麼xslt解析器?如果存在,它將是一個特定的解析器功能。你可以用XSLT發明一些東西,它處理你的xslt,它包含一個節點,告訴你要合併的xslt ......棘手...... – rene 2012-02-15 13:44:40

+0

對不起。我不確定我關注? xslt解析器是什麼意思?對不起,我只是一個低端的開發者:) – 2012-02-15 13:47:28

+1

@ user1001421:你需要熟悉XSLT'xsl:import'和'xsl:include'指令。但是,他們是無條件的。目前XSLT 1.0不允許動態條件包含。通過使用'use-when'屬性,XSLT 2.0允許一些非常有限的條件編譯時包含。 – 2012-02-15 13:57:50

回答

7

如果您的「外部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> 
+0

完美謝謝你的擴展答案! – brutusmaximus86 2014-02-13 08:13:15