Я пытаюсь отформатировать список, используя ФОРМАТИРУЮЩИЕ ОБЪЕКТЫ, который находится в этом формате.Используйте несколько столбцов, если количество элементов в списке, который будет отображаться, больше, чем 5
XML
<SessionValues>
<SessionValue Name=\"Items\">
<Value>Item1</Value>
<Value>Item2</Value>
<Value>Item3</Value>
<Value>Item4</Value>
<Value>Item5</Value>
<Value>Item6</Value>
<Value>Item7</Value>
<Value>Item8</Value>
<Value>Item9</Value>
<Value>Item10</Value>
<Value>Item11</Value>
<Value>Item12</Value>
<Value>Item13</Value>
<Value>Item14</Value>
<Value>Item15</Value>
</SessionValue>
<SessionValues>
XSLT
<xsl:template match="Table[@Caption='Proofs']">
<fo:list-block >
<xsl:for-each select="key('sessionValues-id','Items')/Value">
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block>
<fo:inline>•</fo:inline>
</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()" text-align="left" font-size="10pt">
<fo:block text-align="left" font-size="10pt">
<xsl:value-of select="text()"/>
</fo:block>
</fo:list-item-body>
</fo:list-item>
</xsl:for-each>
</fo:list-block>
</xsl:template>
Это дает мне длинный список всех пунктов. Мне нужно показать это так, чтобы, если количество отображаемых элементов больше 5, оно должно появиться в следующем столбце. Итак, для примера выше должно быть 3 столбца по 5 элементов каждый.
** UPDATE **
Ожидаемый результат
<fo:table>
<fo:table-body>
<fo:table-row>
<fo:table-cell>Item 1</fo:table-cell>
<fo:table-cell>Item 2</fo:table-cell>
<fo:table-cell>Item 3</fo:table-cell>
<fo:table-cell>Item 4</fo:table-cell>
<fo:table-cell>Item 5</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>Item 6</fo:table-cell>
<fo:table-cell>Item 7</fo:table-cell>
<fo:table-cell>Item 8</fo:table-cell>
<fo:table-cell>Item 9</fo:table-cell>
<fo:table-cell>Item 10</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>Item 11</fo:table-cell>
<fo:table-cell>Item 12</fo:table-cell>
<fo:table-cell>Item 13</fo:table-cell>
<fo:table-cell>Item 14</fo:table-cell>
<fo:table-cell>Item 15</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
** UPDATE - 2 **
Я следую @Franks предложение и создали несколько шаблонов, чтобы быть в зависимости от моего состояния. Что-то вроде этого
<fo:table>
<fo:table-column number-columns-repeated="$columns" />
<fo:table-body>
<xsl:for-each select="key('sessionValues-id','Items')/Value">
<xsl:choose>
<xsl:when test="SomeCondition">
<!-- template with Row and Cell -->
</xsl:when>
<xsl:otherwise>
<!-- template with Cell -->
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</fo:table-body>
</fo:table>
У меня нет ошибок, но он даже не генерирует ничего. Я подозреваю, что это <fo:table-column number-columns-repeated="$columns" />
Может ли кто-нибудь сказать мне, как мы можем указать количество столбцов в моем случае динамически? Количество столбцов хранится в переменной $columns
.
Пожалуйста, ваши ожидаемый выход. –
Отображение ожидаемого результата как XSL-FO будет намного яснее, чем приближение в виде текста. –
Вы можете определить свою переменную столбца, как это: ' ' –
Frank