XSL必需:根据当前单元格的属性合并下一个单元格的内容



我有一个表,它有两列。基于第一列的rowmerge和rowspan属性,它应该合并下一列的值。

RowMerged属性用于确定单元格是否合并。RowSpan属性用于查找合并的单元格数量。如果Rowspan为0,则该单元格将与上面的单元格合并。

在下面的例子中,我们将输入作为5行,它将返回3行作为输出。ie)前两行合并为一行,未合并的第二列的内容应复制到上一行。

关注的主要是单元格的内容而不是属性。

样本输入:

<Table Name="abc">
    <TBODY>
        <Row>
            <Cell RowMerged="T" RowSpan="2"><Element>ABC</Element></Cell>
            <Cell><Element>21</Element></Cell>
        </Row>
        <Row>
            <Cell RowMerged="T" RowSpan="0"></Cell>
            <Cell><Element>ABC</Element></Cell>
        </Row>
        <Row>
            <Cell RowMerged="F" RowSpan="1"><Element>PQR</Element></Cell>
            <Cell><Element>19</Element></Cell>
        </Row>
        <Row>
            <Cell RowMerged="T" RowSpan="2"><Element>XYZ</Element></Cell>
            <Cell><Element>99</Element></Cell>
        </Row>
        <Row>
            <Cell RowMerged="T" RowSpan="0"></Cell>
            <Cell><Element>Sample</Element></Cell>
        </Row>
    </TBODY>
</Table>

样本输出:

<Table Name="abc">
    <TBODY>
        <Row>
            <Cell RowMerged="F" RowSpan="1"><Element>ABC</Element></Cell>
            <Cell><Element>21ABC</Element></Cell>
        </Row>
        <Row>
            <Cell RowMerged="F" RowSpan="1"><Element>PQR</Element></Cell>
            <Cell><Element>19</Element></Cell>
        </Row>
        <Row>
            <Cell RowMerged="F" RowSpan="1"><Element>XYZ</Element></Cell>
            <Cell><Element>99Sample</Element></Cell>
        </Row>
    </TBODY>
</Table>

您可以尝试以下操作:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes" />
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Row">
        <xsl:variable name="rows" select="Cell[1]/@RowSpan"/>
        <xsl:copy>
                <Cell RowMerged="F" RowSpan="1">
                <xsl:apply-templates select="Cell[1]/*" />
            </Cell>
            <Cell>
                <Element>
                    <xsl:apply-templates select="Cell[2]/Element/node()" />
                    <xsl:apply-templates select="following-sibling::Row[position() &lt; $rows]/Cell[2]/Element/node()" />
                </Element>
            </Cell>
        </xsl:copy>
        <xsl:apply-templates select="Row[Cell[1][@RowSpan > 0]]" />
    </xsl:template>
    <xsl:template match="TBODY">
        <xsl:apply-templates select="Row[Cell[1][@RowSpan > 0]]" />
    </xsl:template>
</xsl:stylesheet>

具有以下输出:

<Table Name="abc">
    <Row>
        <Cell RowMerged="F" RowSpan="1">
            <Element>ABC</Element>
        </Cell>
        <Cell>
            <Element>21ABC</Element>
        </Cell>
    </Row>
    <Row>
        <Cell RowMerged="F" RowSpan="1">
            <Element>PQR</Element>
        </Cell>
        <Cell>
            <Element>19</Element>
        </Cell>
    </Row>
    <Row>
        <Cell RowMerged="F" RowSpan="1">
            <Element>XYZ</Element>
        </Cell>
        <Cell>
            <Element>99Sample</Element>
        </Cell>
    </Row>
</Table>

相关内容

  • 没有找到相关文章

最新更新