Люди правы, что XML может быть сгенерирован на стороне сервера, однако, если вы решили отложить это поколение, вот как это сделать на клиенте, используя XSLT1.0 (XSLT 2.0 можетпросто используйте стандартную функцию XPath 2.0 tokenize()
, но современные браузеры напрямую не поддерживают XSLT 2.0):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<tags>
<xsl:apply-templates/>
</tags>
</xsl:template>
<xsl:template match="text()" name="split">
<xsl:param name="pText" select="."/>
<xsl:param name="pDelim" select="', '"/>
<xsl:param name="pTagName" select="'tag'"/>
<xsl:if test="string-length($pText) >0">
<xsl:element name="{$pTagName}">
<xsl:value-of select=
"substring-before(concat($pText, $pDelim), $pDelim)"/>
</xsl:element>
<xsl:call-template name="split">
<xsl:with-param name="pText" select=
"substring-after($pText, $pDelim)"/>
<xsl:with-param name="pDelim" select="$pDelim"/>
<xsl:with-param name="pTagName" select="$pTagName"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
, когда это преобразование применяется к следующему документу XML (вашпредоставленная строка обернута в верхний элемент, чтобы сделать его правильно сформированным XML-документом, чтобы его можно было обработать с помощью XSLT):
<t>cars, red, 2010</t>
желаемый, правильный результат получается :
<tags>
<tag>cars</tag>
<tag>red</tag>
<tag>2010</tag>
</tags>
Заметьте : универсальность этого решения - текст, строка-разделитель и «тэг» все указываются в качестве параметров.