xml-fo-pdf表格:';科尔斯潘';当列数为动态时

xml-fo-pdf表格:';科尔斯潘';当列数为动态时,xml,xslt,pdf,html-table,xml-formatting,Xml,Xslt,Pdf,Html Table,Xml Formatting,我正在使用xml fo在pdf文档中生成一个表。 列数是动态的。列仅在测试通过时显示在测试中,我使用的变量有$var1、$var2、。。。指向xml节点。 我有点像 <xsl:element name="fo:table-row"> <xsl:element name="fo:table-cell" use-attribute-sets="table-cell"> <xsl:attribute name="number-columns-sp

我正在使用xml fo在pdf文档中生成一个表。
列数是动态的。列仅在测试通过时显示
在测试中,我使用的变量有$var1、$var2、。。。指向xml节点。

我有点像

 <xsl:element name="fo:table-row">
    <xsl:element name="fo:table-cell" use-attribute-sets="table-cell">
        <xsl:attribute name="number-columns-spanned"> **???** </xsl:element>
        <xsl:element name="fo:block">Text that spans over columns</xsl:element>
    </xsl:element>
 </xsl:element>
 <xsl:element name="fo:table-row" use-attribute-sets="headerRow"> 
    <xsl:element name="fo:table-cell" use-attribute-sets="table-cell">
       <xsl:element name="fo:block">some value here</xsl:element>
    </xsl:element>
    <xsl:if test="$var1">
       <xsl:element name="fo:table-cell" use-attribute-sets="table-cell">
          <xsl:element name="fo:block">maybe some value here 2</xsl:element>
       </xsl:element>
    </xsl:if>
    <xsl:if test="$var2">
       <xsl:element name="fo:table-cell" use-attribute-sets="table-cell">
          <xsl:element name="fo:block">maybe some value here 3</xsl:element>
       </xsl:element>
    </xsl:if>
    ...
</xsl:element>

**???** 
跨列的文本
这里有些价值
也许这里有些价值2
也许这里有一些价值3
...
我将第一行扩展到所有列。 “跨越的列数”是可变的,取决于通过的测试数。

是否有一种简单的方法可以动态提取传递的条件数量,以便正确定义跨越的属性编号列

您可以使用如下表达式计算变量的内容:

count($var1 | $var2 | $var3 | ...)
假设每个变量都可能是一个空集。如果您的变量是true/false值,那么您可以利用XSL中false为0,true为1这一事实(至少对于我正在使用的解释器):

如果值不是节点集,也不是布尔值,请先将其转换为布尔值:

boolean($var1) + boolean($var2) + boolean($var3) + ...
这不是一种非常优雅的处理方式,但它确实有效

,布尔人在使用数字时确实应该这样做。很高兴知道

boolean($var1) + boolean($var2) + boolean($var3) + ...