Subject: Re: [xsl] too many columns From: "Gabi Bucataru" <gabi@xxxxxxxxxxxxxxxxx> Date: Thu, 24 Oct 2002 10:30:18 -0500 |
Thanks a lot, Jarno & Mike, Awsome! However I have 2 questions here: 1. See, the thing is that i will never know how many of those A1, A2 elements (and so on) I will have. Once it might be only 2, 4, who knows. So is there a way that I can make the template dynamic? I mean this one (now I have 6 A's there): <xsl:template match="A1|A2|A3|A4|A5|A6"> <td valign="top"> <xsl:attribute name="style">color:#<xsl:choose> <xsl:when test="@color"> <xsl:value-of select="@color" /> </xsl:when> <xsl:otherwise>000000</xsl:otherwise> </xsl:choose>;background-color:#<xsl:choose> <xsl:when test="@fond"> <xsl:value-of select="@fond" /> </xsl:when> <xsl:otherwise>FFFFFF</xsl:otherwise> </xsl:choose>;</xsl:attribute> <xsl:value-of select="." /> </td> </xsl:template> 2. The second question is that I would like to start look into XSLT 1.0... Can you please point me to a resource to learn that? I would like to make this move. Thanks a lot !!! Gabi. ----- Original Message ----- From: "Mike Brown" <mike@xxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Thursday, October 24, 2002 3:03 AM Subject: Re: [xsl] too many columns > Jarno.Elovirta@xxxxxxxxx wrote: > > > I have a xml/xsl duet where i would like to render multiple > > > tables with the > > > info that is between the <Page></Page> tags as seen in the > > > XML (source) here > > > http://65.104.178.73/print.xml > > > > For future reference, it would probably be better if you posted a sample from your source that shows the problem, instead of pointing to a file on the net, so people won't have to wget it. > > There's nothing wrong with posting a URL to the source. It's a not a large > file at all, but is larger than ought to be posted to the list. > > One problem with the source, offhand, is that there are elements named > 'XMLData' and 'XMLNodeName'. While this doesn't break well-formedness, it is > in violation of the XML 1.0 spec, because it starts with 'XML' yet isn't a > name standardized upon by the W3C. Choose a different name that does not start > with 'XML' (case-insensitive). > > > > However, my column headers are rendered perfectly fine, but I > > > have more columns that I need instead of having the first > > > <Page></Page>table content > > > in the first table and the second <Page></Page> in the second table. > > > > > > It is hard to explain but I guess seeing it will help you understand. > > > > > > The stylesheet is here: > > > http://65.104.178.73/print.xsl > > > > Anyhow, it seems that you're using the Microsoft-XSL-dialect-that-has-nothing-to-do-with-XSLT-1.0. Thus, you should either ask Microsoft for assistance or e.g. see Microsoft XSL FAQ <http://www.netcrucible.com/xslt/msxml-faq.htm>, or rewrite you stylesheet in XSLT 1.0, and come back if you're having problems with that. > > I wasn't going to attempt to reproduce the VBScript's functionality, but it > looks like most of it wasn't even needed. The following does not use any > pre-XSLT-1.0-specific constructs, and will probably produce output very close > to what was expected. It seems to work in IE, but I can't test with MSXML2 > (IE5.0), myself. > > <?xml version="1.0" encoding="utf-8"?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/TR/WD-xsl"> > > <xsl:template match="/"> > <html> > <head> > <style type="text/css"> > p.page {page-break-after: always} > body {background-color:#cccccc; margin:0 > font:MessageBox; > font:Message-Box;} > .TableBody {background: white; > font-family: arial; > font-size: 9px} > .TableHeading {border-top-width:1; > border-left-width:1; > border-bottom-width:1; > border-right-width:1; > border-right-color:black; > border-bottom-color:black; > border-style:outset; > font-family:verdana; > font-size:10px; > background-color:#cccccc} > </style> > <!-- rest of head here --> > </head> > <body> > <xsl:apply-templates select="XMLData/Page" /> > </body> > </html> > </xsl:template> > > <xsl:template match="Page"> > <p class="page"> > <table style="background: black" cellspacing="1" width="600"> > <thead> > <xsl:apply-templates select="Columns/Column" mode="thead" /> > </thead> > <tbody class="TableBody"> > <xsl:apply-templates select="People/Person" /> > </tbody> > </table> > </p> > </xsl:template> > > <xsl:template match="Caption"> > <xsl:value-of select="." /> > </xsl:template> > > <xsl:template match="Column" mode="thead"> > <th nowrap="yes" class="TableHeading"> > <xsl:apply-templates select="Caption" /> > </th> > </xsl:template> > > <xsl:template match="Person"> > <tr> > <xsl:apply-templates select="Data/*" /> > </tr> > </xsl:template> > > <xsl:template match="A1|A2|A3|A4|A5|A6"> > <td valign="top"> > <xsl:attribute name="style">color:#<xsl:choose> > <xsl:when test="@color"> > <xsl:value-of select="@color" /> > </xsl:when> > <xsl:otherwise>000000</xsl:otherwise> > </xsl:choose>;background-color:#<xsl:choose> > <xsl:when test="@fond"> > <xsl:value-of select="@fond" /> > </xsl:when> > <xsl:otherwise>FFFFFF</xsl:otherwise> > </xsl:choose>;</xsl:attribute> > <xsl:value-of select="." /> > </td> > </xsl:template> > > </xsl:stylesheet> > > If you change the namespace, it should work as XSLT 1.0. > > Note that I did circumvent the logic for finding which 'A' element to process > (A1, A2, A3, etc.) by looking at the Column specifications. The example data > had them all in order. If they will not really be in order, and since MSXML2 > does not permit the XPath functions that would be needed to sort them, you'll > have to ask in an MSXML specific forum. > > Anyway, I hope this helps at least with sorting out the colors and number > of columns, and helps reduce the stylesheet to a more manageable size. > There was a lot of unnecessary stuff in it. In general, any time you do > > <xsl:template match="foo"> > <xsl:for-each select="bar"> > ... > </> > </> > > you probably could have changed the xsl:apply-templates to select > "foo/bar", and then made a template that matches bar instead of foo. > > - Mike > ____________________________________________________________________________ > mike j. brown | xml/xslt: http://skew.org/xml/ > denver/boulder, colorado, usa | resume: http://skew.org/~mike/resume/ > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] too many columns, Mike Brown | Thread | Re: [xsl] too many columns, Mike Brown |
[xsl] msxml weirdness, Wineman, Corey J. | Date | Re: [xsl] msxml weirdness, Serge I. Zolotukhin |
Month |