Re: [xsl] processing text nodes one character at a time

Subject: Re: [xsl] processing text nodes one character at a time
From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx>
Date: Tue, 26 Sep 2006 22:38:11 +0530
Here is a XSLT 1.0 solution:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="";>

<xsl:output method="text" />

<xsl:template match="/">
 <xsl:call-template name="TransformString">
   <xsl:with-param name="string" select="element" />

<xsl:template name="TransformString">
 <xsl:param name="string" />

 <xsl:if test="string-length($string) &gt; 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)" />


This when applied to XML:

<?xml version="1.0" encoding="UTF-8"?>

Produces the wanted output:


But as David showed, it's much simpler with XSLT 2.0.

On 9/26/06, Marie Bilde Rasmussen <mariebilderas@xxxxxxxxx> 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

Mukul Gandhi

Current Thread