1

这应该不难,但是 XSL 文档并不是特别友好,因为涉及到这些事情:

我正在尝试转换具有以下标签的文档:

<Region>string</Region>
<Region class="unknown">string</Region>

我已经处理了前一个案例

<xsl:for-each select="region">
<tags>
</xsl:for-each>

但是,对于 class="unknown" 条件,我需要 if-else 语法。

介意提供一个新手示例来说明如何处理这个问题吗?

谢谢!

4

2 回答 2

3

与其使用xsl:for-eachxsl:ifxsl:choose,另一种方法是使用与xsl:apply-templates匹配的模板。

<xsl:apply-templates select="Region" />

然后你有(至少)两个单独的模板来匹配区域元素。

<xsl:template match="Region[@class='unknown']">
    <!-- Do something -->
</xsl:template>

<xsl:template match="Region">
    <!-- Do something else -->
</xsl:template>

请注意,在这种情况下,XSLT 处理器应始终首先匹配更具体的模板(检查@class 属性的模板),因此第二个模板将仅匹配没有此类属性的区域元素。

于 2013-01-12T22:58:15.160 回答
0

XSLT 中 if-else 的最直接模拟是通过 choose-when-otherwise 提供的:

<xsl:choose>
    <!-- if -->
    <xsl:when test="@class= 'knownClass'">
       <!-- Do something -->
    </xsl:when>

    <!-- else if -->
    <xsl:when test="@class= 'unknown'">
       <!-- Do something else -->
    </xsl:when>

    <!-- else -->
    <xsl:otherwise>
       <!-- Default case -->
    </xsl:otherwise>
</xsl:choose>

与 if-else 语句一样,an<xsl:choose>可以有 1 个或多个<xsl:when>s,而 the<xsl:otherwise>是可选的。

在你的情况下,你可以把它放在里面<xsl:for-each>

<xsl:for-each select="region">
   <xsl:choose>
       ...
   </xsl:choose>
</xsl:for-each>
于 2013-01-12T21:55:50.100 回答