I have transformated xml:
<import>
<issue>
<article>
<languageVersion>
<title>some title</title>
<keywords>keyword1; keyword2; keyword3</keywords>
</languageVersion>
</article>
<article>
<languageVersion>
<title>some title</title>
<keywords>keyword1; keyword2; keyword3</keywords>
</languageVersion>
</article>
</issue>
</import>
And now I want to separate all words in tag by semicolon using xslt transformation, so the target xml would be like this:
<import>
<issue>
<article>
<languageVersion>
<title>some title</title>
<keywords>
<keyword>keyword1</keyword>
<keyword>keyword2</keyword>
<keyword>keyword3</keyword>
</keywords>
</languageVersion>
</article>
<article>
<languageVersion>
<title>some title</title>
<keywords>
<keyword>keyword1</keyword>
<keyword>keyword2</keyword>
<keyword>keyword3</keyword>
</keywords>
</languageVersion>
</article>
<article>
</issue>
</import>
How can I do this using XSLT transformation? I tried already already using code from there but unfortunatelly the code was destroying rest of xml elements:
<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="keywords">
<keywords>
<xsl:apply-templates/>
</keywords>
</xsl:template>
<xsl:template match="keywords" name="split">
<xsl:param name="pText" select="."/>
<xsl:param name="pItemElementName" select="'keyword'"/>
<xsl:if test="string-length($pText) > 0">
<xsl:variable name="vNextItem" select=
"substring-before(concat($pText, ';'), ';')"/>
<xsl:element name="{$pItemElementName}">
<xsl:value-of select="$vNextItem"/>
</xsl:element>
<xsl:call-template name="split">
<xsl:with-param name="pText" select="substring-after($pText, ';')"/>
<xsl:with-param name="pItemElementName" select="$pItemElementName"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>