Here is a XSLT 1.0 solution:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:call-template name="TransformString">
<xsl:with-param name="string" select="element" />
</xsl:call-template>
</xsl:template>
<xsl:template name="TransformString">
<xsl:param name="string" />
<xsl:if test="string-length($string) > 0">
<xsl:text>x</xsl:text><xsl:value-of select="substring($string, 1, 1)" />
<xsl:call-template name="TransformString">
<xsl:with-param name="string" select="substring($string, 2)" />
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
This when applied to XML:
<?xml version="1.0" encoding="UTF-8"?>
<element>abcd</element>
Produces the wanted output:
xaxbxcxd
But as David showed, it's much simpler with XSLT 2.0.
On 9/26/06, Marie Bilde Rasmussen <mariebilderas(_at_)gmail(_dot_)com> wrote:
I am transforming xml data into our type-setters proprietary data
format. I use XSLT 2.0 for the purpose. In special cases, I need to
process text nodes one character at a time: the string must be copied
to the output, but with a code (let's call it "x") inserted before
each character.
Thus, the input: <element>abcd</element>
should lead to the output: "xaxbxcxd"
I think I need some combination of a for-loop and a substring-function
that selects the characters one by one (or maybe this can be solved
using a regex). I just can't get it right... Any suggestions?
Marie Bilde Rasmussen,
Gyldendal Publishers, Dictionary Department
Copenhagen, Denmark
--
Regards,
Mukul Gandhi
http://gandhimukul.tripod.com
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--