Hello @ all,
first: excuse me for my bad english - i hope you will understand me ;-). 
It's been a while ago since i wrote a longer text ^^.
Now it's 2 years ago since i was working with XSLT and XML - but the 
last week i mostly got back into it. My profession is more XHTML + CSS.
To the problem:
- i read the FAQ (all the FAQ's i found)
- used searchengines
to solve my "little" problem.
There are two systems. AuktionMaster and Yatego. Our products are listed 
in the Database of AuktionMaster. Now i want to get them to another 
marketplace > Yatego.
There's an option to generate a Eport-Format using XSL. With this XSL i 
can generate a CSV File. I need this CSV file, because Yatego only 
imports ;-separated CSV-Files. Ok - i thought - no problem. Well it's 
frustrating :-(.
My XSL:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0">
<xsl:output method="text" media-type="text/comma-separated-values" 
version="1.0" indent="yes" encoding="ISO-8859-1" />
<!-- this must be meinly correct i think -->
<!-- fields needed -->
<xsl:template match="/">
<xsl:text>foreign_id;article_nr;title;tax;price;price_uvp;price_purchase;tax_differential;basic_price;units;delivery_surcharge;delivery_calc_once;short_desc;long_desc;url;auto_linefeet;picture;picture2;picture3;picture4;picture5;categories;variants;discount_set_id;stock;delivery_date;cross_selling;delitem;status;top_offer</xsl:text>
		<xsl:text>
</xsl:text>
		<xsl:apply-templates select="export/item"/>
</xsl:template>
<xsl:template match="export/item">
  <xsl:choose>
    <xsl:when test="inventory_active='1'"><!-- i check if product is 
set flag active -->
    ... now i catch the fields needed with the fields from the source
	<xsl:value-of select="item_id" /> <!-- for example product number -->
	<xsl:text>;</xsl:text>
    ... well, i've got the field names from an other XSL inside of that 
back-end. So i don't know which version/processor of XSL they use (sorry)
    .... ok - i get the fields mainly by <xsl:value-of select="name" />
Now we came to the product description, which is stored with HTML inside 
the DB. If i use
<xsl:value-of select="description_table/description" 
disable-output-escaping="yes" />
the HTML Code with instyle CSS <p style="font: 9pt Arial, 
sans-serif;">This Product is ...</p> and a lot other HTML Tags like 
<div>, <img>, <ul> ... is breaking inside the CSV-File on the place of 
the ";" (semicolon). Viewing the file with Excel one part of the HTML 
Code is inside the field "long_desc" an the rest inside the other 
fields. So the CSV-File is not correct.
Nearby with method="text" disable-output-escaping="yes" is not working 
(i read it in the FAQ).
Then i found a lot of Tepmplates how to get the HTML Code inside this 
one field through escaping quotes.
So i used
<xsl:text>"</xsl:text>
  <xsl:apply-templates select="description_table/description" 
mode="escape-CSV" />
<xsl:text>"</xsl:text>
<xsl:text>;</xsl:text>
... rest of the XSL:
     <xsl:text></xsl:text>
     <xsl:text>;</xsl:text>
   <xsl:text>
</xsl:text><!-- line break here -->
  </xsl:when>
 </xsl:choose>
</xsl:template>
Here's the Template for escaping the quotes. It worked. But now it 
doesn't. I don't know why. I never changed it. It's like i found it on 
the net.
<xsl:template match="node()" mode="escape-CSV" name="escape-CSV">
   <xsl:param name="string" select="." />
   <xsl:choose>
      <xsl:when test="contains($string, '"')">
         <xsl:value-of select="substring-before($string, '"')" />
         <xsl:text>\"</xsl:text>
         <xsl:call-template name="escape-CSV">
            <xsl:with-param name="string"
                  select="substring-after($string, '"')" />
         </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
         <xsl:value-of select="$string" />
      </xsl:otherwise>
   </xsl:choose>
</xsl:template>
Ok i know i'll get it back to work - but the main problem is is: After 
escaping the html-code it shows inside the CSV <p> ... . Because 
the CSV is going to be importet in Yatego i need to replace the field 
(string) and get the < and > back. So i tried and tried. And i didn't 
get it. I know the problem isn't much big - but i need the 
"Aaaaaah"-Effect to go on :-).
Here is one of the ideas i tried:
1.
<xsl:template match="node()" mode="escape_special_characters" 
name="escape_special_characters">
  <xsl:param name="input_text" select="." />
<!-- http://www.w3schools.com/xsl/el_param.asp -->
    <xsl:variable name="step_1">
      <xsl:call-template name="replace_quot">
        <xsl:with-param name="input_text" select="." />
	  </xsl:call-template>
    </xsl:variable>
    <xsl:value-of select="$step_1" />
</xsl:template>
2.
<xsl:template name="replace_lt">
	<xsl:param name="input_text" />
	<xsl:param name="special_char" />
	<xsl:choose>
		<xsl:when test="contains($input_text, $special_char)">
			<xsl:value-of select="substring-before($input_text, $special_char)" />
				<xsl:text><</xsl:text>
			<xsl:value-of select="$special_char" />
				<xsl:call-template name="replace_lt">
					<xsl:with-param name="input_text" 
select="substring-after($input_text, $special_char)" />
					<xsl:with-param name="special_char" select="$special_char" />
				</xsl:call-template>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="$input_text" />
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>
...
I think my main problem is not the recursive part it's the basic part of 
calling the template:
<xsl:apply-templates select="description_table/description" 
mode="escape-CSV" />
I don't know how to get all the templates to work or how correctly to 
call them for:
- 1. double quote the HTML-Code to get something linke "&lgt;p> ... "
- 2. replace < with < and > with > to get correct HTML Code inside 
the CSV
- 3. to import the CSV into Yatego to get the product description 
displayed correctly in the browser.
Thank you all very very much for all kind of help.
Greetings
Eddie