根据上下文更改XSLT中的节点

时间:2017-11-15 09:12:40

标签: html xml xslt xslt-1.0 xslt-2.0

我有一个XSL文件,我想在两个不同的上下文中包含或使用。在我想要使用的一个上下文中,阻止'阻止'但在其他情况下,我想使用' div class =" Block"'。

有没有什么可以改变我所有的'阻止'在我的XSL到' div class =" Block"'反之亦然,基于上下文,可能使用参数?

1 个答案:

答案 0 :(得分:1)

这是一个简单的条件:

<xsl:variable name="outputformat" select="'html'"/>
<xsl:choose>
    <xsl:when test="$outputformat = 'html'">
        <div class="Block">
            <!-- your html code -->
        </div>
    </xsl:when>
    <xsl:otherwise>
        <fo:block>
           <!-- your normal code -->
        </fo:block>
    </xsl:otherwise>
</xsl:choose>

或者,您可以创建第二个xsl文档并复制除应更改的节点以外的每个节点 这看起来像是:

<xsl:template match="@*|node()">
    <xsl:choose>
        <xsl:when test="local-name() = 'block'">
            <xsl:element name="div">
                <xsl:attribute name="class" select="'Block'"/>
                <xsl:apply-templates select="@*"/>
                <xsl:apply-templates/>
            </xsl:element>
        </xsl:when>
        <xsl:otherwise>
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>