It is probably easiest to start with "XSLT identity transformation", which in its raw form looks like this:
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
It basically creates deep copy of the XML file, which is not very interesting as such, but it lets you decorate certain elements during that.
Depending on what how you wish the initial HTML look like, you can decorate it by adding specific templates, or altering the core recursive template to produce, let's say, nested <div>
elements ... or <ul>
/ <li>
or whatever.
This can be a simple start then:
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<ul>
<xsl:apply-templates select="*"/>
</ul>
</xsl:template>
<xsl:template match="@*|node()">
<li>
<xsl:value-of select="local-name()"/>
<xsl:if test="*">
<ul>
<xsl:apply-templates select="@*|node()"/>
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
You can play with anything then, at first you will probably want different rendering for attributes, then your well-known elements etc.