Sample XSLT
Use the Sample XSLT to generate the required XSLT files.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
>
<xsl:variable name="styleTableBorder">border: 2px solid black;border-collapse:collapse;padding-left: 5px;</xsl:variable>
<xsl:variable name="style_td">width: 25%; padding-left: 5px;</xsl:variable>
<xsl:variable name="styleSubTotal1">border: 1px solid black;border-collapse:collapse;padding: 10px;vertical-align:top; </xsl:variable>
<xsl:variable name="styleSummaryPart2">padding: 10px;text-align:right;</xsl:variable>
<xsl:variable name="styleLightSkyBlueColor">background-color: #ebf9fc;</xsl:variable>
<xsl:variable name="styleLightYellowColor">background-color: #e7e6d2;</xsl:variable>
<!--Entry point-->
<xsl:template match="/">
<xsl:apply-templates select="Documents/InvoiceData"/>
</xsl:template>
<xsl:template name="renderFields">
<xsl:param name="nodes"></xsl:param>
<xsl:param name="startindex"></xsl:param>
<xsl:param name="columncount"></xsl:param>
<xsl:variable name="count" select="count($nodes)" ></xsl:variable>
<xsl:variable name="endindex" select="$startindex + $columncount - 1"></xsl:variable>
<xsl:if test="$count >= $startindex ">
<tr xmlns="http://www.w3.org/1999/xhtml">
<!-- out of the node list, get only the nodes for which we want to generate the td tag. -->
<xsl:for-each select="$nodes[position() >= $startindex and not (position() > $endindex)]">
<!-- output is the value of the node-->
<td style="width:25%;padding-left: 5px; {$styleLightYellowColor};">
<xsl:value-of select="./@DisplayName"/>
</td>
<td style="width:25%;text-align:left;">
<xsl:value-of select="."/>
</td>
</xsl:for-each>
</tr>
<!-- call this template recursively in order to loop through the next set of nodes -->
<xsl:call-template name="renderFields">
<xsl:with-param name="nodes" select="$nodes"></xsl:with-param>
<!-- make the startindex = endindex + 1 to get the next set of nodes -->
<xsl:with-param name="startindex" select="$endindex+1"></xsl:with-param>
<!-- keep the column count as it is -->
<xsl:with-param name="columncount" select="$columncount"></xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="Documents/InvoiceData">
<html>
<body style="width:98%">
<!--Header Part-->
<table style="height: 41px; width:100%;background-color:#0000fe;color:white;font-weight:bold">
<tbody>
<tr style="font-size:30px" >
<td style="width: 50%; padding-left: 12px; ">
<xsl:value-of select="Header/@Title"></xsl:value-of>
</td>
<td style="width: 50%; text-align: right; padding-right: 12px;">
<xsl:value-of select="Header/@InvoiceType"></xsl:value-of>
</td>
</tr>
</tbody>
</table>
<br></br>
<!--Invoice Id Fields-->
<table style="width:100%;{$styleTableBorder};border: 0px ">
<tbody>
<tr style="">
<td style="width:50%"></td>
<td style="{$style_td}">
<xsl:value-of select="IdFields/InvoiceDate/@DisplayName"></xsl:value-of>
</td>
<td style="{$style_td}">
<xsl:value-of select="IdFields/InvoiceNumber/@DisplayName"></xsl:value-of>
</td>
</tr>
<tr style="">
<td></td>
<td style="{$styleTableBorder}">
<xsl:value-of select="IdFields/InvoiceDate"></xsl:value-of>
</td>
<td style="{$styleTableBorder}">
<xsl:value-of select="IdFields/InvoiceNumber"></xsl:value-of>
</td>
</tr>
</tbody>
</table>
<br></br>
<!--Buyer & Seller Data-->
<table style="width:100%;">
<tbody>
<tr>
<td style="width:50%">
<table style="width:100%;">
<tr style=" ">
<td style=" width:50%">
<u>
<xsl:value-of select="Buyer/@Title"></xsl:value-of>
</u>
</td>
<td style="width:50%"></td>
</tr>
<tr style="height:25px"></tr>
<xsl:for-each select="Buyer/*">
<tr>
<td style="padding-left: 5px; {$styleLightYellowColor};">
<xsl:value-of select="current()/@DisplayName"/>
</td>
<td>
<xsl:value-of select="current()"/>
</td>
</tr>
</xsl:for-each>
</table>
</td>
<td style="width:50%">
<table style="width:100%;">
<tr style="">
<u>
<xsl:value-of select="Supplier/@Title"></xsl:value-of>
</u>
<td style="width:50%"></td>
</tr>
<tr style="height:25px"></tr>
<xsl:for-each select="Supplier/*">
<tr>
<td style="padding-left: 5px; {$styleLightYellowColor}">
<xsl:value-of select="current()/@DisplayName"/>
</td>
<td>
<xsl:value-of select="current()"/>
</td>
</tr>
</xsl:for-each>
</table>
</td>
</tr>
</tbody>
</table>
<br></br>
<hr style="height:2px;border:none;color:black;background-color:black;" />
<br></br>
<table style="width:100%;">
<!-- call rendertr template with paramter-->
<xsl:call-template name="renderFields">
<!-- select all "InvoiceFields" nodes and pass it as a parameter to the xslt template-->
<xsl:with-param name="nodes" select="InvoiceFields/*"></xsl:with-param>
<xsl:with-param name="startindex">1</xsl:with-param>
<!-- change the column count as per your need -->
<xsl:with-param name="columncount">2</xsl:with-param>
</xsl:call-template>
</table>
<br></br>
<!--Line Items Data-->
<xsl:value-of select="LineItems/@Title"></xsl:value-of>
<br></br>
<table style="width:100%;padding-top:10px;{$styleSubTotal1}">
<thead>
<tr>
<xsl:for-each select="LineItems/LineItem[1]/*">
<th style="text-align:center;{$styleSubTotal1}{styleLightSkyBlueColor}">
<xsl:value-of select="current()/@DisplayName"/>
</th>
</xsl:for-each>
</tr>
</thead>
<xsl:for-each select="LineItems/*">
<tr>
<xsl:for-each select="current()/*">
<xsl:variable name="styleTextAlign" select="concat('text-align:',current()/@Alignment)"/>
<td style="{$styleSubTotal1};{$styleTextAlign}">
<xsl:value-of select="current()"/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
<br />
<!--Attachments Data-->
<div style="padding-bottom:10px;">
<b>
<xsl:value-of select="Attachments/@Title"></xsl:value-of>
</b>
</div>
<table style="width:100%;{$styleSubTotal1};padding-top:10px;">
<thead>
<tr>
<xsl:for-each select="Attachments/Attachment[1]/*">
<th style="text-align:center;{$styleSubTotal1}{$styleLightSkyBlueColor}">
<xsl:value-of select="current()/@DisplayName"/>
</th>
</xsl:for-each>
</tr>
</thead>
<xsl:for-each select="Attachments/*">
<tr>
<xsl:for-each select="current()/*">
<td style="{$styleSubTotal1}">
<xsl:value-of select="current()"/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
<br></br>
<!--Notes-->
<table style="width: 100%; border: 0px solid black;border-collapse:collapse;padding:10px;">
<tr>
<td style="border: 1px solid black; border:none;border-bottom:solid;">
<b>
<xsl:value-of select="Notes/@Title"></xsl:value-of>
</b>
</td>
</tr>
<tr>
<td style="border: 0px solid black; border-collapse: collapse;">
<xsl:value-of select="Notes/InvoiceNote"></xsl:value-of>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>