I did some kind of workaround...
The first table-cell is always there (without the xsl:if). The following cells are surrounded with the xsl:if.
See an example:
<fo:table table-layout="fixed" width="100%" font-family="Helvetica" font-size="12pt">
<fo:table-header >
<fo:table-row font-weight="bold" background-color="rgb(133,133,133)">
<fo:table-cell>
<fo:block>
<xsl:value-of select="./headlines/headline[1]" />
</fo:block>
</fo:table-cell>
<xsl:if test="boolean(./targetAgreements/targetAgreement/brand/@visible = 'true')">
<fo:table-cell>
<fo:block>
<xsl:value-of select="./headlines/headline[2]" />
</fo:block>
</fo:table-cell>
</xsl:if>
<xsl:if test="boolean(./targetAgreements/targetAgreement/currentTarget/@visible = 'true')">
<fo:table-cell>
<fo:block>
<xsl:value-of select="./headlines/headline[3]" />
</fo:block>
</fo:table-cell>
</xsl:if>
...