我想创建一个表格结构,用 THEAD 分隔标题行,用 TBODY 分隔数据行:
输入XML:
<Rowsets>
<Rowset>
<Columns>
<Column Description="Date"/>
<Column Description="Time"/>
</Columns>
<Row>
<Date>DATA1</Date>
<Time>DATA2</Time>
</Row>
<Row>
<Date>DATA1</Date>
<Time>DATA2</Time>
</Rowset>
</Rowsets>
以下XSLT会分隔标题和正文,但我无法弄清楚如何在数据行之间包装标记:
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<HTML>
<BODY>
<TABLE>
<XSL:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="Columns|Row">
<tr><xsl:apply-templates/></tr>
</xsl:template>
<xsl:template match="Columns">
<thead><xsl:apply-templates/></thead>
</xsl:template>
<xsl:template match="Columns/*">
<th><xsl:apply-templates select="@Description"/></th>
</xsl:template>
<xsl:template match="Row/*">
<td><xsl:apply-templates/></td>
</xsl:template>
当前HTML输出:
<THEAD>
<TR>
<TH>Date</TH><TH>Time</TH>
</TR>
</THEAD>
<TR>
<TD>DATA1</TD><TD>DATA2</TD>
</TR>
<TR>
<TD>DATA1</TD><TD>DATA2</TD>
</TR>
如何使用 TBODY 包装数据行?谢谢!
答案 0 :(得分:3)
您可以apply-templates
限制(选择)应该应用的节点。
我会用这样的东西:
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<HTML>
<BODY>
<TABLE>
<THEAD>
<xsl:apply-templates select="Columns"/>
</THEAD>
<TBODY>
<xsl:apply-templates select="Row"/>
</TBODY>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="Columns|Row">
<TR><xsl:apply-templates/></TR>
</xsl:template>
<xsl:template match="Columns/*">
<TH><xsl:value-of select="@Description"/></TH>
</xsl:template>
<xsl:template match="Row/*">
<TD><xsl:apply-templates/></TD>
</xsl:template>
答案 1 :(得分:3)
最简单的解决方案可能是将以下模板添加到样式表中:
<xsl:template match="Rowset">
<xsl:apply-templates select="Columns"/>
<tbody>
<xsl:apply-templates select="Row"/>
</tbody>
</xsl:template>
完成样式表(还有其他一些小改动):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<HTML>
<BODY>
<TABLE>
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="Rowset">
<xsl:apply-templates select="Columns"/>
<tbody>
<xsl:apply-templates select="Row"/>
</tbody>
</xsl:template>
<xsl:template match="Columns">
<thead><tr><xsl:apply-templates/></tr></thead>
</xsl:template>
<xsl:template match="Columns/*">
<th><xsl:apply-templates select="@Description"/></th>
</xsl:template>
<xsl:template match="Row">
<tr><xsl:apply-templates/></tr>
</xsl:template>
<xsl:template match="Row/*">
<td><xsl:apply-templates/></td>
</xsl:template>
</xsl:stylesheet>