我正在寻找 1.0 XSLT 转换,它会传播非空单元格,直到找到一个新单元格。我的输入:
<table>
<row>
    <column_1></column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value1</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1></column_1>
    <column_2></column_2>
</row>
<row>
    <column_1></column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value2</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1></column_1>
    <column_2></column_2>
</row>
<row>
    <column_1></column_1>
    <column_2></column_2>
</row>
<row>
    <column_1></column_1>
    <column_2></column_2>
</row>
</table>
预期输出:
<table>
<row>
    <column_1></column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value1</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value1</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value1</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value2</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value2</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value2</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value2</column_1>
    <column_2></column_2>
</row>
</table>
我曾尝试使用previous::row[1]/column_1,但最终只有一个副本。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
</xsl:template>
<xsl:template name="replace-value">
    <xsl:param name="value"/>
    <xsl:copy>
        <xsl:value-of select="$value"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="//column_1">
    <xsl:choose>
        <xsl:when test=".=''">
            <xsl:call-template name="replace-value">
                <xsl:with-param name="value" select="preceding::row[1]/column_1/text()"/>
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:copy>
                <xsl:apply-templates select="node() | @*"/>
            </xsl:copy>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
</xsl:stylesheet>
像:
<table>
<row>
    <column_1></column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value1</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value1</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1></column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value2</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1>Value2</column_1>
    <column_2></column_2>
</row>
<row>
    <column_1></column_1>
    <column_2></column_2>
</row>
<row>
    <column_1></column_1>
    <column_2></column_2>
</row>