我有一个XML文件有一个表。我正在使用XSLT版本1.0。我需要在特定数量的行之后拆分表(7行之后的示例)。下一页应该有相同的标题,数据应该继续。水平分割XML表
图: 1. Original Table 2. Table Transform
XML:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"?>
<TABLE FRAME="ALL">
<TGROUP COLS="3">
<COLSPEC COLNAME="col1" COLWIDTH="5cm"/>
<COLSPEC COLNAME="col2" COLWIDTH="6.00cm"/>
<COLSPEC COLNAME="col3" COLWIDTH="5.91cm"/>
<THEAD>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA><EMPHASIS>TA</EMPHASIS></PARA></ENTRY>
<ENTRY COLSEP="1" ROWSEP="1"><PARA><EMPHASIS>TB</EMPHASIS></PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA><EMPHASIS>TC</EMPHASIS></PARA></ENTRY>
</ROW>
</THEAD>
<TBODY>
<ROW>
<ENTRY COLSEP="1" MOREROWS="13" ROWSEP="1"><PARA>A</PARA></ENTRY>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>B</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>C</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A1</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>B1</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A2</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>B2</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A4</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A5</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A5<PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A6</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A6</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A7</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A7</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A8</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A8</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A9</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A9</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A10</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A10</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A11</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A11</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A12</PARA></ENTRY>
</ROW>
</TBODY>
</TGROUP>
</TABLE>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="prowLimit" select="10"/>
<xsl:variable name="vartable" select="/*"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="TABLE/ROW">
<xsl:if test="position() mod $prowLimit = 7">
<TBODY>
<xsl:copy-of select="$vartable/@*"/>
<xsl:copy-of select=". | following-sibling::ROW[not(position() > $prowLimit)]"/>
</TBODY>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
所需的输出:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"?>
<TABLE FRAME="ALL">
<TGROUP COLS="3">
<COLSPEC COLNAME="col1" COLWIDTH="5cm"/>
<COLSPEC COLNAME="col2" COLWIDTH="6.00cm"/>
<COLSPEC COLNAME="col3" COLWIDTH="5.91cm"/>
<THEAD>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA><EMPHASIS>TA</EMPHASIS></PARA></ENTRY>
<ENTRY COLSEP="1" ROWSEP="1"><PARA><EMPHASIS>TB</EMPHASIS></PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA><EMPHASIS>TC</EMPHASIS></PARA></ENTRY>
</ROW>
</THEAD>
<TBODY>
<ROW>
<ENTRY COLSEP="1" MOREROWS="13" ROWSEP="1"><PARA>A</PARA></ENTRY>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>B</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>C</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A1</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>B1</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A2</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>B2</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A4</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A5</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A5<PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A6</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A6</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A7</PARA></ENTRY>
</ROW>
</TBODY>
</TGROUP>
</TABLE>
<TABLE FRAME="ALL">
<TGROUP COLS="3">
<COLSPEC COLNAME="col1" COLWIDTH="5cm"/>
<COLSPEC COLNAME="col2" COLWIDTH="6.00cm"/>
<COLSPEC COLNAME="col3" COLWIDTH="5.91cm"/>
<THEAD>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA><EMPHASIS>TA</EMPHASIS></PARA></ENTRY>
<ENTRY COLSEP="1" ROWSEP="1"><PARA><EMPHASIS>TB</EMPHASIS></PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA><EMPHASIS>TC</EMPHASIS></PARA></ENTRY>
</ROW>
</THEAD>
<TBODY>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A7</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A8</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A8</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A9</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A9</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A10</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A10</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A11</PARA></ENTRY>
</ROW>
<ROW>
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A11</PARA></ENTRY>
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A12</PARA></ENTRY>
</ROW>
</TBODY>
</TGROUP>
</TABLE>
但是,我不知道是否所需的输出是正确的,因为我不知道它是否遵循XML层次结构。我将按照图中所示的最终结果来实现。
我使用了Dimitre Novatchev在Split large table into several smaller tables提供的概念。我得到XML解析器错误,以便用XML维护XML的结构。
如何修改XSLT以便我可以得到“Table Transform”图中显示的输出?
两个表格链接指向相同的图像。 –
谢谢蒂姆,更新了这个数字。 –
请发布(1)**完整** XML和(2)预期结果**作为代码**。 –