XSL - 如果节点有子节点,如何做一件事,否则做另一件事

时间:2013-04-25 09:54:01

标签: xml xslt

我是xslt的新手,并尝试了各种方法来检查节点是否有子节点。我有以下内容:

<xsl:if test="child::list">

以上部分有效,但问题是我尝试在when的此方法中使用otherwise,但它不起作用。它看起来像这样:

<xsl:when test="child::list">

我猜是错的,因为它不起作用。

代码如下:

<xsl:for-each select="td">
<td>
    <xsl:when test="child::list">
        <table cellpadding='0' cellspacing='0'>
            <thead>
                <tr>
                    <xsl:for-each select="list/item/table/thead/tr/th">
                        <th><xsl:value-of select="self::node()[text()]"/></th>
                    </xsl:for-each>
                </tr>
                <xsl:for-each select="list/item/table/tbody/tr">
                    <tr>
                        <xsl:for-each select="td">
                            <td><xsl:value-of select="self::node()[text()]"/></td>
                        </xsl:for-each>
                    </tr>
                </xsl:for-each>
            </thead>
        </table>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="self::node()[text()]"/>
    </xsl:otherwise>
</td>
</xsl:for-each>

我们将不胜感激任何帮助......

2 个答案:

答案 0 :(得分:3)

xsl:whenxsl:otherwise必须在xsl:choose内:

<xsl:choose>
  <xsl:when test="...">
    <!-- Do one thing -->
  </xsl:when>
  <xsl:otherwise>
    <!-- Do something else -->
  </xsl:otherwise>
 </xsl:choose>

但你应该做的是正确使用模板:

  <xsl:template match="something">
    ....
    <xsl:apply-templates select="td" mode="list" />
    ....
  </xsl:template>

  <xsl:template match="td" mode="list">
    <xsl:value-of select="."/>
  </xsl:template>

  <xsl:template match="td[list]" mode="list">
    <table cellpadding='0' cellspacing='0'>
      <thead>
        <xsl:apply-templates select='list/item/table/thead/tr' />
        <xsl:apply-templates select="list/item/table/tbody/tr" />
      </thead>
    </table>
  </xsl:template>

  <xsl:template match="th | td">
    <xsl:copy>
      <xsl:value-of select="." />
    </xsl:copy>
  </xsl:template>

  <xsl:template match="tr">
    <xsl:copy>
      <xsl:apply-templates select="th | td" />
    </xsl:copy>
  </xsl:template>

答案 1 :(得分:0)

您创建的XSLT并不好。 xsl:when是xsl的子元素:选择XSLT中缺少的元素。请先更正,然后告诉我们您的结果。