Mega Code Archive

 
Categories / XML / XSLT StyleSheet
 

Generate two tables

File: Data.xml <?xml version="1.0" standalone="yes"?> <report type="Unfilled Orders">   <customer number="CUST111" type="VIP">     <name>name 1</name>     <order-list count="2">       <order number="ORD200" owner="CUST111" total="650.00" status="late">         <item-list>           <item quantity="5" price="100">item 1</item>           <item quantity="2" price="50">item 2</item>           <item quantity="1" price="50">item 3</item>         </item-list>       </order>       <order number="ORD105" owner="CUST111" total="150.00" status="backordered">         <item-list>           <item quantity="6" price="25">item 4</item>         </item-list>       </order>     </order-list>   </customer>   <customer number="CUST222" type="normal">     <name>Alice Liddle</name>     <order-list count="2">       <order number="ORD102" owner="CUST222" total="3490.00" status="late">         <item-list>           <item quantity="20" price="100">item 1</item>           <item quantity="10" price="50">item 2</item>           <item quantity="10" price="50">item 3</item>           <item quantity="10" price="25">item 4</item>           <item quantity="2" price="120">item 5</item>         </item-list>       </order>     </order-list>   </customer> </report> File: Transform.xslt <?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">   <xsl:template match="report">     <HTML>     <BODY>       <FONT SIZE="6">       Report of <xsl:value-of select="@type" /> by Customer       </FONT>       <xsl:apply-templates select="customer" />       </BODY>     </HTML>        </xsl:template>   <xsl:template match="customer">     <HR/>     <TABLE BORDER="1" CELLPADDING="3">       <TR ALIGN="left">         <TH>Customer #:</TH>         <TD><xsl:value-of select="@number" /></TD>         <TH>Name:</TH>         <TD><xsl:value-of select="name" /></TD>         <TH>Status:</TH>         <TD><xsl:value-of select="@type" /></TD>       </TR>     </TABLE>          <xsl:apply-templates select="order-list/order" />   </xsl:template>   <xsl:template match="order">     <P/>     <TABLE BORDER="1" CELLPADDING="3">       <TR ALIGN="left">         <TH>Order #:</TH>         <TD><xsl:value-of select="@number" /></TD>         <TH>Status:</TH>         <TD><xsl:value-of select="@status" /></TD>       </TR>     </TABLE>     <TABLE BORDER="1" CELLPADDING="3" WIDTH="100%">       <TR ALIGN="left">         <TH>Quantity</TH>         <TH>Item</TH>         <TH ALIGN="right">Price</TH>       </TR>       <xsl:apply-templates select="item-list/item" />     </TABLE>        </xsl:template>   <xsl:template match="item">     <TR ALIGN="left">       <TD><xsl:value-of select="@quantity" /></TD>       <TD><xsl:value-of select="text()" /></TD>       <TD ALIGN="right"><xsl:value-of select="@price" /></TD>     </TR>   </xsl:template>        </xsl:stylesheet> Output: <HTML>    <BODY><FONT SIZE="6">                Report of Unfilled Orders by Customer                </FONT><HR>       <TABLE BORDER="1" CELLPADDING="3">          <TR ALIGN="left">             <TH>Customer #:</TH>             <TD>CUST111</TD>             <TH>Name:</TH>             <TD>name 1</TD>             <TH>Status:</TH>             <TD>VIP</TD>          </TR>       </TABLE>       <P></P>       <TABLE BORDER="1" CELLPADDING="3">          <TR ALIGN="left">             <TH>Order #:</TH>             <TD>ORD200</TD>             <TH>Status:</TH>             <TD>late</TD>          </TR>       </TABLE>       <TABLE BORDER="1" CELLPADDING="3" WIDTH="100%">          <TR ALIGN="left">             <TH>Quantity</TH>             <TH>Item</TH>             <TH ALIGN="right">Price</TH>          </TR>          <TR ALIGN="left">             <TD>5</TD>             <TD>item 1</TD>             <TD ALIGN="right">100</TD>          </TR>          <TR ALIGN="left">             <TD>2</TD>             <TD>item 2</TD>             <TD ALIGN="right">50</TD>          </TR>          <TR ALIGN="left">             <TD>1</TD>             <TD>item 3</TD>             <TD ALIGN="right">50</TD>          </TR>       </TABLE>       <P></P>       <TABLE BORDER="1" CELLPADDING="3">          <TR ALIGN="left">             <TH>Order #:</TH>             <TD>ORD105</TD>             <TH>Status:</TH>             <TD>backordered</TD>          </TR>       </TABLE>       <TABLE BORDER="1" CELLPADDING="3" WIDTH="100%">          <TR ALIGN="left">             <TH>Quantity</TH>             <TH>Item</TH>             <TH ALIGN="right">Price</TH>          </TR>          <TR ALIGN="left">             <TD>6</TD>             <TD>item 4</TD>             <TD ALIGN="right">25</TD>          </TR>       </TABLE>       <HR>       <TABLE BORDER="1" CELLPADDING="3">          <TR ALIGN="left">             <TH>Customer #:</TH>             <TD>CUST222</TD>             <TH>Name:</TH>             <TD>Alice Liddle</TD>             <TH>Status:</TH>             <TD>normal</TD>          </TR>       </TABLE>       <P></P>       <TABLE BORDER="1" CELLPADDING="3">          <TR ALIGN="left">             <TH>Order #:</TH>             <TD>ORD102</TD>             <TH>Status:</TH>             <TD>late</TD>          </TR>       </TABLE>       <TABLE BORDER="1" CELLPADDING="3" WIDTH="100%">          <TR ALIGN="left">             <TH>Quantity</TH>             <TH>Item</TH>             <TH ALIGN="right">Price</TH>          </TR>          <TR ALIGN="left">             <TD>20</TD>             <TD>item 1</TD>             <TD ALIGN="right">100</TD>          </TR>          <TR ALIGN="left">             <TD>10</TD>             <TD>item 2</TD>             <TD ALIGN="right">50</TD>          </TR>          <TR ALIGN="left">             <TD>10</TD>             <TD>item 3</TD>             <TD ALIGN="right">50</TD>          </TR>          <TR ALIGN="left">             <TD>10</TD>             <TD>item 4</TD>             <TD ALIGN="right">25</TD>          </TR>          <TR ALIGN="left">             <TD>2</TD>             <TD>item 5</TD>             <TD ALIGN="right">120</TD>          </TR>       </TABLE>    </BODY> </HTML>