Thomas J.S.: Anzahl der Spalten ermitteln

Beitrag lesen

Hallo,

für die Festlegung Spaltenbreite (column-width="") einer Tabelle brauche ich die Anzahl der td`s aus dem XML. Ich habe hier einen kläglichen Versuch mit einer Variablen und for-each:

<xsl:template match="table/tr/td">
<fo:block >
  <fo:table width="100%" padding-after="1cm" >

Damit würdest du für jede Tabellenzeille (aus dem XML) eine Tabelle im PDf erzeugen.

<xsl:template match="table">
   <fo:block >
      <fo:table width="100%" padding-after="1cm">

<xsl:for-each select="td">
    <xsl:variable name="Anzahl_td" select="count(td)"/>

Anzahl_td wird so glewich aus zwei Gründen immer null sein:

  • mit <xsl:template match="table/tr/td"> bist du bereits im <td> darin mit <xsl:for-each select="td"> bringt null Treffer, und dann
  • versuchst nochmal in tds 8die eas gar nicht gibt) weitere tds zu zählen: <xsl:variable name="Anzahl_td" select="count(td)"/>, was natürlich auch immer null sein wird.

Also:

<xsl:template match="table">

jetzt kommt es darauf an, ob du in jeder Zeile (tr) die gleiche Anzahl von Zellen (td) hast. Sagen wir du nimmst die erte Zeile:

<xsl:variable name="Anzahl_td" select="count(tr[1]/td)"/>
   <fo:block >
      <fo:table width="100%" padding-after="1cm">

Der Rest kann bleiben wie vorher:

xsl:choose
     <xsl:when test="{$Anzahl_td}= 5">
        <fo:table-column  column-width="4cm" />
     </xsl:when>

...

</xsl:choose>

Grüße
Thomas