[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