[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Hello Gustaf,
here is a solution that works for me:
The correct applying the template on td and th is important for a correct position(). The next step is the "grouping" of the col-elements. Because they have different colgroup-parents, you must use parentheses for this job. This should work.
Two more comments: Why are you using the attribute-axis, writing @ is much shorter ... and in my eyes more readable. And have a look at <xsl:copy-of/> above. It does the same job like your <xsl:if/> + <xsl:attribute/> + <xsl:value-of/>. If a attribute should have the same name and value in input and output, it will be easier to copy it.
Output:
Regards,
Joerg
Gustaf Liljegren wrote:
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Re: [xsl] Column widths
Subject: Re: [xsl] Column widths From: Joerg Heinicke <joerg.heinicke@xxxxxx> Date: Sun, 23 Jun 2002 11:40:49 +0200 |
Hello Gustaf,
here is a solution that works for me:
<xsl:template match="tr"> <xsl:apply-templates select="td|th"/> </xsl:template>
<xsl:template match="td|th"> <xsl:variable name="x" select="position()"/> <fo:table-cell> <xsl:copy-of select="(ancestor::table/colgroup/col)[$x]/@width"/> <fo:block> <xsl:apply-templates/> </fo:block> </fo:table-cell> </xsl:template>
The correct applying the template on td and th is important for a correct position(). The next step is the "grouping" of the col-elements. Because they have different colgroup-parents, you must use parentheses for this job. This should work.
Two more comments: Why are you using the attribute-axis, writing @ is much shorter ... and in my eyes more readable. And have a look at <xsl:copy-of/> above. It does the same job like your <xsl:if/> + <xsl:attribute/> + <xsl:value-of/>. If a attribute should have the same name and value in input and output, it will be easier to copy it.
Output:
<fo:table-cell width="30%" xmlns:fo="test"> <fo:block>A header</fo:block> </fo:table-cell> <fo:table-cell width="60%" xmlns:fo="test"> <fo:block>Some content here.</fo:block> </fo:table-cell> <fo:table-cell width="10%" xmlns:fo="test"> <fo:block>Some more here.</fo:block> </fo:table-cell>
Regards,
Joerg
Gustaf Liljegren wrote:
Mike Brown wrote:
Brackets indicate predicates. Think of them as filters, providing everything to the left of them, for which everything inside them is true.
Got it.
Okay, here's a sample table:
<table> <colgroup> <col width="30%"/> </colgroup> <colgroup> <col width="60%"/> <col width="10%"/> </colgroup> <tbody> <tr> <th>A header</th> <td>Some content here.</td> <td>Some more here.</td> </tr> </tbody> </table>
For now, I assume there will always be equal amounts of table cells in a row as there are <col> elements. The result will look like this:
<fo:table> <fo:table-body> <fo:table-row> <fo:table-cell width="30%">...</fo:table-cell> <fo:table-cell width="60%">...</fo:table-cell> <fo:table-cell width="10%">...</fo:table-cell> </fo:table-row> </fo:table-body> </fo:table>
Here's how the <td> template looks like. The problem is in the long XPath expressions:
<xsl:template match="td">
<xsl:variable name="x" select="position()"/>
<fo:table-cell xsl:use-attribute-sets="table-padding">
...
<xsl:if test="ancestor::table//col[$x]/attribute::width">
<xsl:attribute name="width">
<xsl:value-of select="ancestor::table//col[$x]/attribute::width"/>
</xsl:attribute>
</xsl:if>
<fo:block>
<xsl:apply-templates/>
</fo:block>
</fo:table-cell>
</xsl:template>
Gustaf
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Column widths, Gustaf Liljegren | Thread | Re: [xsl] Column widths, Gustaf Liljegren |
Re: [xsl] String Manipulation, Steve Ball | Date | Re: [xsl] Column widths, Gustaf Liljegren |
Month |
Keywords