Разделение вашего XSLT на отдельные шаблоны может улучшить читаемость.
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
>
<xsl:output method="text" encoding="UTF-8" media-type="text/plain"/>
<xsl:template match="/">
<xsl:text>[</xsl:text>
<xsl:apply-templates select="//div[@id='playlist_a']//ul[@class='clearme']" />
<xsl:text>]</xsl:text>
</xsl:template>
<xsl:template match="ul">
<xsl:text>{'artist':'</xsl:text><xsl:value-of select="li[@class='artist']" />
<xsl:text>','track':'</xsl:text><xsl:value-of select="li[@class='song']" />
<xsl:text>'}</xsl:text>
<xsl:if test="position() < last()">,</xsl:if>
</xsl:template>
</xsl:stylesheet>
Кроме того, значения исполнителя и песни могут нарушить ваш JSON, если они содержат одинарные кавычки, поэтому может потребоваться замена одинарных кавычек.