Stef4n: Doppelte Leerzeichen / Tab mit br ersetzten

Hallo zusammen,

ich hab hier eine XML, das enthält meiner Meinung nach 2 Leerzeichen im Knoten Description, anstelle der 2 Leerzeichen möchte ich in der HTML Ausgabe ein <br />.

<Product>  
<Texts>  
<Text language="de">  
<Name>NAME</Name>  
<Description>Lorem Ipsum.  Dank der revolutionären Pigmenttinte entstehen Ausdrucke, die absolut wisch- und wasserfest sind.	Dorlores</Description>  
</Text>  
</Texts>  
</Product>

Translate funzt nicht und anderes Ideen aus dem Netz haben nicht geklappt. Das ganze bitte in XSLT 1.0.

Danke euch schon mal.

Gruß Stef4n

  1. Habe hier eine Lösung gefunden, die funktioniert aber nur wenn ich folgendes zeichen als Trennzeichen/Absatzzeichen nutze: &#xD;

    Leider aber nicht mit "  " oder "&#160;&#160;" oder "&nbsp;&nbsp;" oder "&#x00A0;&#x00A0;" wird nichts erkannt und otherwise setzt ein.

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
    	<xsl:output method="html" encoding="utf-8"  
    		doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"  
    		doctype-system="http://www.w3.org/TR/html4/loose.dtd"/>  
      
    	<xsl:template match="Product">  
    		<html>  
    			<head>  
    				<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
    				<title>XML/XSLT Absatz</title>  
    				<style type="text/css">  
    					<!--  
    					body{  
    					    background-color:#ffffff;  
    					}-->  
    				</style>  
    			</head>  
    			<body bgcolor="#ffffff" style="background-color:#ffffff">  
    				<xsl:call-template name="add-br">  
    					<xsl:with-param name="text" select="Texts/Text[@language = 'de']/Description"/>  
    				</xsl:call-template>  
    			</body>  
    		</html>  
    	</xsl:template>  
      
    	<xsl:template name="add-br">  
    		<xsl:param name="text" select="."/>  
    		<xsl:choose>  
    			<xsl:when test="contains($text, '  
    ')">  
    				<xsl:value-of select="substring-before($text, '  
    ')"/>  
    				<br /><br />  
    				<xsl:call-template name="add-br">  
    					<xsl:with-param name="text" select="substring-after($text,'  
    ')"/>  
    				</xsl:call-template>  
    			</xsl:when>  
    			<xsl:otherwise>  
    				<xsl:value-of select="$text"/>  
    			</xsl:otherwise>  
    		</xsl:choose>  
    	</xsl:template>  
    </xsl:stylesheet>
    
    1. Habe hier eine Lösung gefunden, die funktioniert aber nur wenn ich folgendes zeichen als Trennzeichen/Absatzzeichen nutze: &#xD;

      In der Abfrage steckt ja auch ein Zeilenumbruch drin.

      Leider aber nicht mit "  " oder "&#160;&#160;" oder "&nbsp;&nbsp;" oder "&#x00A0;&#x00A0;" wird nichts erkannt und otherwise setzt ein.

      Probiere es so:

      <xsl:when test="contains($text, ' ') or contains($text, '&nbsp;&nbsp;') or contains($text, '&#160;&#160;')">...</xsl:when>

      Grüße,
      Thomas

      1. [Nachtrag:]

        Probiere es so:

        <xsl:when test="contains($text, ' ') or contains($text, '&nbsp;&nbsp;') or contains($text, '&#160;&#160;')">...</xsl:when>

        Alternativ mehrere xsl:when mit den einzelnen Abfragen bauen und dann bei den substring-*-Funktionen entsprechend anpassen.

        Grüße,
        Thomas

        1. Habs, musste nur die beiden Zeichen direkt aus der XML kopieren und einsetzen. Hab vorher selbst 2 Leerzeichen erstellt.. Manchmal ist es so einfach.

          [Nachtrag:]

          Probiere es so:

          <xsl:when test="contains($text, ' ') or contains($text, '&nbsp;&nbsp;') or contains($text, '&#160;&#160;')">...</xsl:when>

          Alternativ mehrere xsl:when mit den einzelnen Abfragen bauen und dann bei den substring-*-Funktionen entsprechend anpassen.

          Grüße,
          Thomas

          1. Hi,

            Habs, musste nur die beiden Zeichen direkt aus der XML kopieren und einsetzen. Hab vorher selbst 2 Leerzeichen erstellt.. Manchmal ist es so einfach.

            Evtl. waren es gar keine normalen/geschützten Leerzeichen?

            Was sagt denn der String Analyzer dazu?

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2. Hallo Stef4n,

    Translate funzt nicht und anderes Ideen aus dem Netz haben nicht geklappt. Das ganze bitte in XSLT 1.0.

    translate() ersetzt einzelne Zeichen.

    Ansatz:

    <p><xsl:value-of select="substring-before(Description, ' ')"/><br /><xsl:value-of select="substring-after(Description, ' ')"/></p>

    Sollen weitere doppelte Leerzeichen durch br-Elemente ersetzt werden, müsste dieser Ansatz rekursiv wiederholt werden (via xsl:call-template).

    Grüße,
    Thomas