Таблица xml-fo pdf: 'colspan', когда количество столбцов является динамическим

Я создаю таблицу в pdf-документе с помощью xml-fo.
Количество столбцов является динамическим. Столбцы отображаются только при прохождении тестов.
В тестах я использую такие переменные, как $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>

Я расширяю 1-ю строку, чтобы охватить все столбцы. "number-columns-spanned" является переменной величиной и зависит от количества пройденных тестов.
Существует ли простой способ динамического извлечения количества условий, которые выполняются, чтобы правильно определить атрибут number-columns-spanned?


person mickthompson    schedule 13.07.2010    source источник


Ответы (1)


Вы можете подсчитать содержимое переменных, используя такое выражение:

count($var1 | $var2 | $var3 | ...)

Это предполагает, что каждая из ваших переменных является возможно пустым набором. Если вместо этого ваши переменные являются значениями true/false, вы можете воспользоваться тем фактом, что false равно 0, а true равно 1 в XSL (по крайней мере, с интерпретатором, который я использую):

$var1 + $var2 + $var3 + ...

Если значения не являются наборами узлов и не являются логическими значениями, сначала преобразуйте их в логические значения:

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

Не очень элегантный способ справиться с этим, но он работает.

Согласно спецификации XPath логические значения действительно должны вести себя таким образом при приведении к числовым значениям. Хорошо знать!

person Welbog    schedule 13.07.2010