Re: [xsl] escaping ampersands in replace function

Subject: Re: [xsl] escaping ampersands in replace function
From: Abel Braaksma <>
Date: Tue, 04 Sep 2007 20:33:26 +0200
Mario Madunic wrote:
Sorry here is the output I get

Tagged the World of Franklin &amp; Jefferson," display was created by general
Charles and Ray Eames fof the American Revolution centennial Administration, a
ernment organization Show will go on to Warsaw and London, then proceed to the
Museum of Modern Art in N.Y. Later it is to be exhibited in Chicago and San

<bodyContent> <p>Tagged the World of Franklin &amp; Jefferson," display was created by

<snip />

<xsl:variable name="l_TempBodyContent">
<xsl:for-each select="body/node()">

<snip />

What you are seeing is the output fromt he default template for any text nodes. Your xsl:for-each never selects anything. You can test this by explicitly telling the processor not to output anything when there's no match at all:

<xsl:template match="text()" />

Add that to your stylesheet. If you still get your output, you'll have to try a more concise example and post a complete stylesheet here so we can help you further. The following works for me:

<xsl:stylesheet version="2.0" xmlns:xsl="";>
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:variable name="mytext">Text &amp; more text</xsl:variable>
<xsl:template match="/">
<xsl:value-of select="replace($mytext, '&amp;', 'and')" />


it outputs:

Text and more text

As you can see, no &amp;. Try it with your processor, see if it does the same... Narrowing down the problem with a tiny example that illustrates is, usually resolves the problem as well ;)

-- Abel Braaksma

Current Thread