Subject: Re: [xsl] Problem With Different Colors for Alternate Rows From: Joerg Heinicke <joerg.heinicke@xxxxxx> Date: Wed, 06 Nov 2002 01:50:52 +0100 |
<xsl:template match="*" mode="row"> <TR class="evenRowStyle"> <xsl:if test="position() mod 2 = 1"> <xsl:attribute name="class">oddRowStyle</xsl:attribute> </xsl:if> <xsl:apply-templates select="." mode="cell"/> </TR> </xsl:template>
<xsl:template match="Side_Dish" mode="cell"> <TD>Side Dish:</TD> <TD><xsl:apply-templates select="."/></TD> </xsl:template>
<xsl:template match="Side_Dish"> <xsl:value-of select="."/> <!-- maybe more understandable, but I prefer the second one: test="name(following-sibling::*[1] = 'Side_Dish')" --> <xsl:if test="following-sibling::*[1][self::Side_Dish]"> <xsl:text>, </xsl:text> <xsl:apply-templates select="following-sibling::*[1]"/> </xsl:if> </xsl:template>
Jeorg,
Thank you. Mode seems to be working ok, except for one thing -- in my real XSLT (which is more complicated than the sample below), for certain data elements (e.g., side dish) I search for multiple occurences of the element and I concatenate them with commas as below. This is causing confusion in the assessment of the position() function. It seems to think I am looking for the position of the row, when I am really looking for the position of this particular side dish. This confusion is causing each side dish to print out on a new line instead of on a single line with a comma-separated list. Is there any way to test if this side dish is first or last w/o using the position() function (thus avoiding this type of confusion)?
<xsl:template match="Side_Dish"> <xsl:if test="position() = 1"> <xsl:text disable-output-escaping="yes"><td class="oddRowStyle">Side Dish:<td class="oddRowStyle"></xsl:text> </xsl:if> <xsl:value-of select="."/> <xsl:choose> <xsl:when test="position() != last()"> <xsl:text>, </xsl:text> </xsl:when> <xsl:otherwise> <xsl:text disable-output-escaping="yes"></td></xsl:text> </xsl:otherwise> </xsl:choose> </xsl:template>
Thanks, Rechell Schwartz
-----Original Message----- From: Joerg Heinicke [mailto:joerg.heinicke@xxxxxx] Sent: Tuesday, November 05, 2002 1:11 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Problem With Different Colors for Alternate Rows
Hello Rechell,
there is also a simple XSL way:
<xsl:template match="/Food_List">
<table>
<xsl:apply-templates select="Main_Food_List | Side_Dish | Desert" mode="row"/>
</table>
</xsl:template>
<xsl:template match="*" mode="row"> <TR class="evenRowStyle"> <xsl:if test="position() mod 2 = 1"> <xsl:attribute name="class">oddRowStyle</xsl:attribute> </xsl:if> <xsl:apply-templates select="."/> </TR> </xsl:template>
<xsl:template match="Main_Food_List"> <TD>Main Course:</TD> <TD><xsl:value-of select="Main_Course"/></TD> </xsl:template>
<xsl:template match="Side_Dish"> <TD>Side Dish:</TD> <TD><xsl:value-of select="."/></TD> </xsl:template>
<xsl:template match="Desert"> <TD>Desert:</TD> <TD><xsl:value-of select="Fancy_Desert"/></TD> </xsl:template>
Regards,
Joerg
Schwartz, Rechell R, ALCAS wrote:
All,
I am having difficulty programming a stylesheet that is supposed to
return the result set as a list of HTML rows in alternating colors.All of the examples that I have seen address how to do this if every data row is is derived from the same type of XML tag. But in my example, each row may come from a completely different section of the XML. Following is a sample XML similar to the one that I am using. Also, another constraint is if any row is missing, it is inhibited, and the alternating color rule must still be preserved. I have tried numerous ways of passing parameters, but have been unable to modify the the row count after a match was found ofr each item. Any help would be GREATLY appreciated.
Sample XML:
<Food_List> <Main_Food_List> <Main_Course> Chicken </Main_Course> </Main_Food_List> <Side_Dish> Potatoes </Side_Dish> <Desert> <Fancy_Desert> Chocolate Truffles </Fancy_Desert> </Desert> </Food_List>
Sample XSLT Stylesheet: <?xml version="1.0" ?> <xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<xsl:output method="html" indent="yes"/> <xsl:template match="/"> <xsl:apply-templates select="Food_List/Main_Food_List/Main_Course"/> <xsl:apply-templates select="Food_List/Side_Dish"/> <xsl:apply-templates select="Food_List/Desert/Fancy_Desert"/>
<xsl:template match="Main_Course"> <TR><TD>Main Course:</TD><TD xsl:value-of select="."/></TD></TR> </xsl:template>
<xsl:template match="Side_Dish"> <TR><TD>Side Dish:</TD><TD xsl:value-of select="."/></TD></TR> </xsl:template>
<xsl:template match="Fancy_Desert"> <TR><TD>Desert:</TD><TD xsl:value-of select="."/></TD></TR> </xsl:template>
</xsl:stylesheet>
Required HTML Output <TABLE> <TR><TD colspan="2">MENU</TD></TR> <TR><TD class="oddRowStyle">Main Dish:</TD><TD
class="oddRowStyle">Chicken</TD></TR>
<TR><TD class="evenRowStyle">Side Dish:</TD><TD
class="oddRowStyle">Potatoes</TD></TR>
<TR><TD class="oddRowStyle">Desert:</TD><TD
class="oddRowStyle">Chocolate Truffles</TR>
</TABLE>
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] Problem With Different Co, Schwartz, Rechell R, | Thread | Re: [xsl] Problem With Different Co, aalbuquerque |
RE: [xsl] access document object du, Dan Diebolt | Date | [xsl] cocoon parameters and matcher, Thomas Sandor |
Month |