This is a simple XSLT to produce a HTML documentation of an XSD file. <?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/10/XMLSchema-instance" version="1.0"> <xsl:output method="html"/> <xsl:template match="/"> <HTML> <BODY> <xsl:apply-templates select="//xsd:complexType[@name]"> <xsl:sort select="@name" /> </xsl:apply-templates> <xsl:apply-templates select="//xsd:simpleType[@name]"> <xsl:sort select="@name" /> </xsl:apply-templates> </BODY> </HTML> </xsl:template> <xsl:template match="xsd:complexType[@name]"> <h4> <xsl:value-of select="@name"/> </h4> <table border="1" width="600px"> <tr> <th width="40%">Name</th> <th width="40%">Type</th> <th width="20%">Occurance</th> </tr> <xsl:apply-templates/> </table> </xsl:template> <xsl:template match="xsd:simpleType[@name]"> <h4> <xsl:value-of select="@name"/> </h4> <xsl:apply-templates/> </xsl:template> <xsl:template match="xsd:restriction[@base]"> <ul> <xsl:for-each select="xsd:enumeration"> <li> <xsl:value-of select="@value"/> </li> </xsl:for-each> </ul> </xsl:template> <xsl:template match="xsd:element"> <xsl:variable name="name" select="@name"/> <xsl:variable name="type" select="@type"/> <tr> <td> <xsl:value-of select="$name"/> </td> <td> <xsl:value-of select="$type"/> </td> <td> <xsl:choose> <xsl:when test="not(@maxOccurs)"> <xsl:value-of select="@minOccurs"/>-1 </xsl:when> <xsl:when test="@maxOccurs=@minOccurs"> <xsl:value-of select="@minOccurs"/> </xsl:when> <xsl:when test="@maxOccurs='unbounded'"> <xsl:value-of select="@minOccurs"/>-* </xsl:when> <xsl:otherwise> <xsl:value-of select="@minOccurs"/>-<xsl:value-of select="@maxOccurs"/> </xsl:otherwise> </xsl:choose> </td> </tr> </xsl:template> </xsl:stylesheet>