使用导入时无法覆盖XSL变量

时间:2014-05-01 19:25:42

标签: xml xslt

我现在已经半天了。无法使简单的变量覆盖工作lol ...

以下是示例:awesomecheck.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:variable name="enableAwesome" select="false()"/>

    <xsl:template name="checkAwesomeness">
        <xsl:if test="$enableAwesome">
            This is awesome
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

然后我尝试使用以下示例覆盖它,例如:realawesome.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:import href="test://xslt/awesomecheck.xsl"/>
    <xsl:variable name="enableAwesome" select="true()"/>  
</xsl:stylesheet>

当我调用realawesome.xsl时,它应该在技术上覆盖变量并触发条件以打印This is awesome。但我在awesomecheck.xsl中获得了一些IO异常。

任何暗示都会非常感激......呃。

PS:我已经阅读了大约6个其他链接,其中几个在Stackoverflow上,尝试了他们的解决方案和方法,但仍然没有。我也尝试使用with-param,但也没有......其中一个更有用的链接是:XSLT stylesheet parameters in imported stylesheets

如果您有更好的方法来实施/覆盖它,请告诉我。 &GT;。&LT;

1 个答案:

答案 0 :(得分:1)

不确定您正在尝试做什么,以及您遇到的问题究竟是什么(如果您收到错误消息,那么聪明的事情就是在您的问题中重现它)。我怀疑真正的问题在于你的测试方法。请尝试以下方法:

<强> external.xsl

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:variable name="var" select="false()"/>

<xsl:template name="mytemplate">
    <xsl:value-of select="$var"/>
</xsl:template>

</xsl:stylesheet>

&#34;真实&#34; XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:import href="external.xsl"/>
<xsl:variable name="var" select="true()"/>

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <output>    
        <xsl:call-template name="mytemplate"/>
    </output> 
</xsl:template>

</xsl:stylesheet>

当上述内容应用于任何XML输入时,结果为:

<?xml version="1.0" encoding="UTF-8"?>
<output>true</output>

即。导入文档中的变量被&#34; local&#34;覆盖。值。