我是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>
我们将不胜感激任何帮助......
答案 0 :(得分:3)
xsl:when
和xsl: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中缺少的元素。请先更正,然后告诉我们您的结果。