This file is part of the Invoice sample.
XSLT File (invoice.xsl)
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="mynamespace"
version="1.0">
<xsl:template match="/">
<HTML>
<STYLE>
TD {font-size:9pt}
</STYLE>
<BODY STYLE="font:9pt Verdana">
<H3>Invoices</H3>
<TABLE BORDER="1">
<TR>
<TD><B>Qty</B></TD>
<TD><B>Description</B></TD>
<TD><B>Price</B></TD>
<TD><B>Discount</B></TD>
<TD><B>Total</B></TD>
</TR>
<xsl:for-each select="invoices/invoice">
<xsl:variable name="customer-id" select="./customer/@ref"/>
<TR>
<TD COLSPAN="5" STYLE="border:none; background-color:#DDDDDD">
Invoice #<xsl:value-of select="@id"/>,
for customer: <xsl:value-of select="/invoices/customers/customer[@id=$customer-id]"/>
</TD>
</TR>
<xsl:for-each select="items/item">
<TR>
<TD>
<xsl:value-of select="qty"/>
</TD>
<TD>
<xsl:value-of select="description"/>
</TD>
<TD>
$<xsl:value-of select="format-number(price,'#,##0.00')"/>
</TD>
<TD> <!-- 10% volume discount -->
<xsl:if test="qty[. >= 10]">$<xsl:value-of select="format-number(price * .10,'##0.00')"/></xsl:if>
</TD>
<TD STYLE="text-align:right"> <!-- line total -->
<xsl:choose>
<xsl:when test="qty[. >= 10]">
$<xsl:value-of select="format-number((price * .90) * qty,'#,##0.00')"/>
</xsl:when>
<xsl:otherwise>
$<xsl:value-of select="format-number(price * qty,'#,##0.00')"/>
</xsl:otherwise>
</xsl:choose>
</TD>
</TR>
</xsl:for-each>
<TR>
<TD COLSPAN="4"></TD>
<TD STYLE="text-align:right; border:none; border-top:1px solid black">$<xsl:value-of select="format-number(user:invoiceTotal(.),'#,##0.00')"/>
</TD>
</TR>
<TR/>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<msxsl:script implements-prefix="user"><![CDATA[
function invoiceTotal(e)
{
var invoice = e.nextNode();
var items = invoice.selectNodes("items/item");
var sum = 0;
for (var item = items.nextNode(); item; item = items.nextNode())
{
var price = item.selectSingleNode("price").nodeTypedValue;
var qty = item.selectSingleNode("qty").nodeTypedValue;
if (qty >= 10)
price = 0.9*price;
sum += price * qty;
}
return sum;
}
]]></msxsl:script>
</xsl:stylesheet>