如何在XSL中生成空白表格单元格?

时间:2014-11-06 09:07:54

标签: xslt xsl-fo

为什么在没有照片存在时表格单元格会消失? 我使用以下代码不起作用。如果我想生成空白表单元格,如果没有可生成的照片,我需要更改什么?

<xsl:for-each select="...............">
    <xsl:choose>
        <xsl:when test="*">
            <xsl:if test=".....">
                <xsl:if test=".......">
                    <fo:table-cell border="solid" text-align="center" font-weight="bold" number-columns-spanned="1">
                        <fo:block>
                            <fo:external-graphic src="url('{concat($FILEPATH,.....'])}')" 
                                 inline-progression-dimension.maximum="4.1cm" block-progression-dimension.maximum="4cm"
                                 content-width="scale-to-fit" content-height= "scale-to-fit" scaling="uniform"/> 
                        </fo:block>
                    </fo:table-cell>
                </xsl:if>
            </xsl:if>
        </xsl:when>
        <xsl:otherwise>
            <fo:table-cell border="solid" text-align="center" font-weight="bold" number-columns-spanned="1">
                <fo:block>
                    <fo:leader/>
                </fo:block>
            </fo:table-cell>
        </xsl:otherwise>
    </xsl:choose>
</xsl:for-each>

2 个答案:

答案 0 :(得分:0)

你有&lt; xsl:when test =“*”&gt;那个节点是空的吗?如果这是你的外部测试并通过,但其他IF(你没有显示)没有通过他们的测试,你的模板什么也没有产生。

用评论打破这个:

<xsl:when test="*">
        <xsl:if test=".....">
            <!-- If this does not pass, you get nothing -->
            <xsl:if test=".......">
                <!-- If this does not pass, you get nothing -->
                <fo:table-cell border="solid" text-align="center" font-weight="bold" number-columns-spanned="1">
                    <fo:block>
                        <fo:external-graphic src="url('{concat($FILEPATH,.....'])}')" 
                             inline-progression-dimension.maximum="4.1cm" block-progression-dimension.maximum="4cm"
                             content-width="scale-to-fit" content-height= "scale-to-fit" scaling="uniform"/> 
                    </fo:block>
                </fo:table-cell>
            </xsl:if>
        </xsl:if>
    </xsl:when>
    <xsl:otherwise>
        <fo:table-cell border="solid" text-align="center" font-weight="bold" number-columns-spanned="1">
            <fo:block>
                <fo:leader/>
            </fo:block>
        </fo:table-cell>
    </xsl:otherwise>

答案 1 :(得分:0)

Kevin是对的,根据您的示例,您的when子句可能已满足,但如果您的一个if语句的计算结果为false,则会得到一个空表格单元格。我的建议是使用逻辑运算符(如AND / OR)将if语句的条件添加到when子句中,例如,说明模板中的条件,如下所示......

<xsl:when test="$node = 'A'">
        <xsl:if test="$node/child = 'B'">
            <xsl:if test="not(contains($node/child,'C'))">
                <fo:table-cell border="solid" text-align="center" font-weight="bold" number-columns-spanned="1">
                    ...
                </fo:table-cell>
            </xsl:if>
        </xsl:if>
    </xsl:when>
    <xsl:otherwise>
        <fo:table-cell border="solid" text-align="center" font-weight="bold" number-columns-spanned="1">
            <fo:block>
                <fo:leader/>
            </fo:block>
        </fo:table-cell>
    </xsl:otherwise>
</xsl:choose>

可以表示为

<xsl:when test="$node = 'A' AND $node/child = 'B' AND not(contains($node/child,'C'))">
                <fo:table-cell border="solid" text-align="center" font-weight="bold" number-columns-spanned="1">
                    ...
                </fo:table-cell>
    </xsl:when>
    <xsl:otherwise>
        <fo:table-cell border="solid" text-align="center" font-weight="bold" number-columns-spanned="1">
            <fo:block>
                <fo:leader/>
            </fo:block>
        </fo:table-cell>
    </xsl:otherwise>
</xsl:choose>

在这样做的过程中,你将确保如果这三个逻辑条件中的任何一个都不满足,那么你的其他块将会被调用,并且领导者应该保持单元格不会崩溃,而不是when语句是尽管您的逻辑条件在技术上并不满足,并且使用空单元格进行清理,但默认情况下会被FOP折叠。希望这能为你解决一些问题。