[KLUG Members] Re: XSLT Transforms
John Holland
members@kalamazoolinux.org
Fri, 10 Jan 2003 17:14:39 -0500
The short version is that you need to create a template for
oem_discount. Wrap the <xsl:apply-templates/> in customer with another
html table structure. Examples can be found in my pyx12 project on
sourceforge. I'll create an working file this weekend.
On Thu, Jan 09, 2003 at 02:01:27PM -0500, Adam Williams wrote:
> Mr. Holland sent me a basic XSLT file that transformed the salesperson
> and customer data into a nice HTML file. I added code for the elements
> below customer, but unfortunately the formatting is kind of gnarly.
>
> I've looked about for a way to only include the header for customer
> discount entries if there are any (essentially an "if"). I've found
> code for doing counts, etc... but no obvious examples of how to properly
> create nested tables.
>
> <?xml version="1.0"?>
> <!--
> <customer_price_matrix_report>
> <salesperson name="" mail="" customercount="0"/>
> <salesperson name="" mail="" customercount="41">
> <customer name="1ST AYD CORPORATION" company="ME"
> number="10225" city="ELGIN" state="IL"/>
> <customer name="ASC INCORPORATED" company="ME"
> number="10421" city="SOUTHGATE" state="MI"/>
> <customer name="CITY OF STURGIS" company="ME"
> number="10268" city="STURGIS" state="MI">
> <oem_discount oem="" captive="1.1" noncaptive="1.0"
> user="sswonk " date="2001-03-20 12:09"/>
> <oem_discount oem="AAA" captive="1.0" noncaptive="1.0"
> user="sswonk " date="2001-03-20 12:09"/>
> </customer>
> -->
> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
>
> <xsl:output method="html"/>
>
> <xsl:template match="/customer_price_matrix_report">
> <html>
> <head>
> </head>
> <body>
> <xsl:apply-templates/>
> </body>
> </html>
> </xsl:template>
>
> <xsl:template match="salesperson">
> <h2><xsl:value-of select="@name"/></h2>
> <table>
> <tr>
> <th align="center" valign="bottom">Customer<br/>name</th>
> <th align="center" valign="bottom">Company<br/>Code</th>
> <th align="center" valign="bottom">Customer's<br/>City</th>
> <th align="center" valign="bottom">Customer's<br/>State</th>
> </tr>
> <xsl:apply-templates/>
> </table>
> </xsl:template>
>
> <xsl:template match="customer">
> <tr>
> <td><xsl:value-of select="@name"/></td>
> <td><xsl:value-of select="@company"/></td>
> <td><xsl:value-of select="@city"/></td>
> <td><xsl:value-of select="@state"/></td>
> </tr>
> <tr>
> <td align="center" colspan="4">Customer OEM Discounts</td>
> </tr>
> <tr>
> <td align="center" colspan="4">
> <table>
> <tr>
> <th align="center" valign="bottom">OEM</th>
> <th align="center" valign="bottom">Captive<br/>Discount</th>
> <th align="center" valign="bottom">Non-Captive<br/>Discount</th>
> <th align="center" valign="bottom">User<br/>Id</th>
> <th align="center" valign="bottom">Update<br/>Date</th>
> </tr>
> <xsl:apply-templates/>
> </table>
> </td>
> </tr>
> </xsl:template>
>
> <xsl:template match="oem_discount">
> <tr>
> <td><xsl:value-of select="@oem"/></td>
> <td><xsl:value-of select="@captive"/></td>
> <td><xsl:value-of select="@noncaptive"/></td>
> <td><xsl:value-of select="@user"/></td>
> <td><xsl:value-of select="@date"/></td>
> </tr>
> </xsl:template>
>
> <xsl:template match="text()|@*"/>
>
> </xsl:stylesheet>
>
> I realize an "if" isn't quite what I want as this isn't a
> procedural thing, but a "state" one. Basically if I could
> move the headers inside the "<xsl:template match="oem_discount">" and
> only have them appear once?
>
> _______________________________________________
> Members mailing list
> Members@kalamazoolinux.org
>
--
--------------------------------------------------------------------
John Holland
john@zoner.org
http://www.zoner.org