我是新手,我正在尝试在< xsl:when>中使用测试用于查看当前节点是否是较早节点的后代的元素。然后,我想将适当的html标记应用于内容。我是xpath表达式的新手。
具体来说,我想申请< th>标签到< tcell>作为< thead>的后代的元素元件。我想申请< td>标签到< tcell>作为< tbody>的后代的元素元素。我最好的猜测是我必须使用< xsl:choose>我的< xsl:template match =“tcell”>中的元素元件。我在测试中尝试了一些不同的xpath表达式,但没有一个能够工作。
问题:是< xsl:choose>这个的最佳选择?
这是我的xml文档,适用的部分。文档结构无法更改。
<table>
<tgroup>
<thead>
<trow>
<tcell>Column Head Text</tcell>
<tcell>Column Head Text</tcell>
</trow>
</thead>
<tbody>
<trow>
<tcell>Cell Text</tcell>
<tcell>Cell Text</tcell>
</trow>
</tbody>
</tgroup>
</table>
我想使用XSL / XPath生成一个包含标题行和正文行的表。我的XSL样式表看起来像这样:
<xsl:template match="/">
<html>
<body>
<xsl:apply templates />
</body>
</html>
</xsl:template>
<xsl:template match="table">
<table>
<xsl:apply-templates />
</table>
</xsl:template>
<xsl:template match="tgroup">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="thead">
<thead>
<xsl:apply-templates />
</thead>
</xsl:template>
<xsl:template match="tbody">
<tbody>
<xsl:apply-templates />
</tbody>
</xsl:template>
<xsl:template match="trow">
<tr>
<xsl:apply-templates />
</tr>
</xsl:template>
<!-- MY TROUBLE STARTS HERE -->
<xsl:template match="tcell">
<xsl:choose>
<xsl:when test="current()!=descendant::tbody">
<th>
<xsl:value-of select="."/>
</th>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:value-of select="."/>
</td>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
任何帮助都将不胜感激。
示例html输出
<table>
<tgroup>
<thead>
<tr>
<th>Column Head Text</th>
<th>Column Head Text</th>
<tr>
</thead>
<tbody>
<tr>
<td>Cell Text</td>
<td>Cell Text</td>
</tr>
</tbody>
</tgroup>
</table>
谢谢, M_66
答案 0 :(得分:0)
<xsl:template match="thead//tcell">
<th>
<xsl:value-of select="."/>
</th>
</xsl:template>
<xsl:template match="tbody//tcell">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
或者如果您仍想使用xsl:choose
:
<xsl:template match="tcell">
<xsl:choose>
<xsl:when test="ancestor::thead">
<th>
<xsl:value-of select="."/>
</th>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:value-of select="."/>
</td>
</xsl:otherwise>
</xsl:choose>
</xsl:template>