XSLT 2.0 решение, которое использует функцию tokenize() разделить на ',
' и создания желаемого содержания:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Text">
<xsl:copy>
<xsl:for-each select="tokenize(., ',\s?')">
<xsl:element name="{substring-before(current(), ': ')}">
<xsl:value-of select="substring-after(., ': ')"/>
</xsl:element>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XSLT 1.0 решения, которое использует рекурсивный шаблон:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Text">
<xsl:copy>
<xsl:call-template name="split"/>
</xsl:copy>
</xsl:template>
<xsl:template name="split">
<xsl:param name="val" select="."/>
<xsl:param name="delimiter" select="','"/>
<xsl:if test="string-length($val) and contains($val, ':')">
<xsl:variable name="item" select="substring-before(concat($val, $delimiter), $delimiter)"/>
<xsl:element name="{substring-before($item, ': ')}">
<xsl:value-of select="substring-after($item, ': ')"/>
</xsl:element>
<xsl:call-template name="split">
<xsl:with-param name="val" select="substring-after($val, $delimiter)"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Приветствие Все, спасибо за предложения, unfortunaltely Iam ограничено использовать xslt 1.0, а не 2.0. – user1840724