You should probably start off by simply selecting all the child elements of the count element
<xsl:apply-templates select="client/product/analytics/count/*" />
Then you would have a single template to match such elements, and output the element name and value, like so
<xsl:template match="count/*">
<tr>
<td><xsl:value-of select="local-name()" /></td>
<td><xsl:value-of select="." /></td>
</tr>
</xsl:template>
Of course, this will output the element name without spaces (i.e as "SkinsCount"). If the element names always ended in "Count", you could do this
<xsl:value-of select="concat(substring-before(local-name(), 'Count'), ' Count')" />
But if you were using XSLT 2.0, you could you make use of xsl:analyze-string to split up the element name based of the capitalised letters.
Try this XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
<table>
<xsl:apply-templates select="client/product/analytics/count/*" />
</table>
</xsl:template>
<xsl:template match="count/*">
<tr>
<td>
<xsl:analyze-string select="local-name()" regex="[A-Z][a-z0-9]*">
<xsl:matching-substring>
<xsl:value-of select="concat(., ' ')" />
</xsl:matching-substring>
</xsl:analyze-string>
</td>
<td><xsl:value-of select="." /></td>
</tr>
</xsl:template>
</xsl:stylesheet>