我有一个SQL查询,可以生成包含7列和多行数据的结果。
我将其转换为XML并通过XSLT运行以生成HTML,一切正常。 XSLT输出如下所示:
Header info
第1行:1 | 2 | 3 | 4 | 5 | 6 | 7 |
第2行:1 | 2 | 3 | 4 | 5 | 6 | 7 |
但是现在一些列中的数据占用了大量空间,我现在需要在XSLT中堆叠列以产生如下结果:
1 | 2 | 3 |
4 | 5 | 6 |
7
我希望第4列在第1列和第7列下方跨越其上方的3列。
这是我的XML的简化版本:
<XML_Data>
<Row>
<EMP_ID>APf92C56</EMP_ID>
<ID>129190950</ID>
<KEY>H59460973</KEY>
<COMP_TS>2015-01-26 11:31</COMP_TS>
<CODE>500</CODE>
<REASON>Text String</REASON>
<CREATE_Reason>Very long text string</CREATE_Reason>
</Row>
<Row>
<EMP_ID>APf92C56</EMP_ID>
<ID>129190950</ID>
<KEY>H59460973</KEY>
<COMP_TS>2015-01-26 11:31</COMP_TS>
<CODE>500</CODE>
<REASON>Text String</REASON>
<CREATE_Reason>Very long text string</CREATE_Reason>
</Row>
</XML_Data>
这是我目前的XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/ROOT">
<table border="0" cellpadding="6">
<tr>
<td style="font-weight:bold;">EMP_ID</td>
<td style="font-weight:bold;">ID</td>
<td style="font-weight:bold;">KEY</td>
<td style="font-weight:bold;">COMP_TS</td>
<td style="font-weight:bold;">CODE</td>
<td style="font-weight:bold;">REASON</td>
<td style="font-weight:bold;">CREATE_Reason</td>
</tr>
<xsl:for-each select="XML_Data/Row">
<tr>
<xsl:for-each select="./*">
<td>
<xsl:value-of select="." disable-output-escaping="yes" />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
我读到了这个回复:XSL xsl:template match="/"并使用<xsl:template match="element">
进行了游戏,但不知道如何强制列到新行,我没有走得太远。
我知道这不是代码生成工具,但我已经梳理了书籍和在线,无法找到我正在寻找的东西。任何帮助,即使只是朝着正确的方向发展,都会受到最大的赞赏。
答案 0 :(得分:0)
我甚至不关心标题,我们可以删除它们。我需要的 要做的是将COMP_TS元素放在一个新行上并放入 新行上的CREATE_Reason元素跨越上面的那一行 它
如果您不关心标题,也不关心分离记录,请尝试:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/XML_Data">
<table border="1">
<xsl:for-each select="Row">
<tr>
<td><xsl:value-of select="EMP_ID"/></td>
<td><xsl:value-of select="ID"/></td>
<td><xsl:value-of select="KEY"/></td>
</tr>
<tr>
<td><xsl:value-of select="COMP_TS"/></td>
<td><xsl:value-of select="CODE"/></td>
<td><xsl:value-of select="REASON"/></td>
</tr>
<tr>
<td colspan="3"><xsl:value-of select="CREATE_Reason"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
应用于示例输入时的(渲染)结果:
答案 1 :(得分:-1)
根据您的信息,基本解决方案可能是:
<table cellspacing="0" width="100%" cellpadding="0">
<tr>
<xsl:for-each select="//XML_Data/Row" >
<td>
<xsl:value-of select="current()/1"/>
</td>
<td>
<xsl:value-of select="current()/2"/>
</td>
<td>
<xsl:value-of select="current()/3"/>
</td>
</xsl:for-each>
</tr>
<tr>
<xsl:for-each select="//XML_Data/Row" >
<td>
<xsl:value-of select="current()/4"/>
</td>
<td>
<xsl:value-of select="current()/5"/>
</td>
<td>
<xsl:value-of select="current()/6"/>
</td>
</xsl:for-each>
</tr>
<tr>
<xsl:for-each select="//XML_Data/Row" >
<td colspan="3">
<xsl:value-of select="current()/7"/>
</td>
</xsl:for-each>
</tr>
</table>