【问题标题】:Changing nodes in XSLT based on context根据上下文更改 XSLT 中的节点
【发布时间】:2017-11-15 09:12:40
【问题描述】:

我有一个 XSL 文件,我想在两个不同的上下文中包含或使用它。在其中一种情况下我想使用 'fo:block' 但在另一种情况下我想使用 'div class="Block"'。

有没有办法根据上下文将我的 XSL 中的所有 'fo:block' 更改为 'div class="Block"' 或反之亦然,也许可以使用参数?

【问题讨论】:

  • 你能解释一下“上下文”是什么意思吗?这是您可以匹配的输入中的节点吗?我想如果你想创建fo:blockdiv,它不会停在那里,而是你想输出 XSL-FO 或 HTML。维护两个不同的样式表或编写一个样式表似乎更容易,其中一种模式用于 XSL-FO 输出,另一种模式用于 HTML 输出。

标签: html xml xslt xslt-1.0 xslt-2.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 文档并复制除

之外的每个节点
<fo:block/> 

你应该改成

<div class="block"/>

这看起来像:

<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>

【讨论】:

  • 在您编写的第一个示例中,我的“html 代码”和“普通代码”中的所有代码都将相同,因此如果我这样做,我将必须拥有完全相同的代码两次,除了第一次我将使用 div class=block,第二次我将使用 fo:block。这是我想尝试避免的。根据上下文,我希望所有内容都包含在 fo:blocks 或 div class="block" 中。所以基本上我猜是一些搜索和替换的聪明方法?在我的 xslt 中。如果这有意义的话。
  • 好吧,如果你想有 2 个不同的输出,你必须做两次......“有没有办法将我的 XSL 中的所有 'fo:block' 更改为 div class='Block '" 下面的示例获取 fo 输出,将 fo:block 更改为 div 并将其保存到另一个文件中。就是这样。
  • 顺便说一句。你不必复制你的代码两次。我假设您正在使用匹配模板,并且您没有对所有内容进行硬编码。只需将 而不是“你的代码”注释放在那里。
  • 不幸的是,其中一些必须是硬编码的,或者实际上是大部分。
  • 在这种情况下,您仍然可以使用
猜你喜欢
  • 1970-01-01
  • 2011-10-20
  • 2016-04-12
  • 1970-01-01
  • 2013-12-17
  • 2010-11-04
  • 1970-01-01
  • 2021-08-24
  • 2011-10-13
相关资源
最近更新 更多