Thomas J.S.: <br/> erzeugen

Beitrag lesen

Hallo,

...
<text>
<![CDATA[
zeile1
zeile2
]]>
</text>
...

soll mit XSLT zu einem XHTML-Dokument

...
<p>
zeile1<br/>
zeile2
</p>
...

transformiert werden.

Ist das möglich?

Nicht wenn du ein CDATA-Bereich hast. Das ist für den XML- und XSL-Prozessor nur Zeichensalat auf dessen Inhalt er keinen Zugriff hat. (das <p> ginge ja noch, aber die <br>-s bekommstdu nicht mehr hin.)

Wenn ja, wie?

<text>
 zeile1
 zeile2
</text>

Dann in deiem XSL:
<xsl:template match="text">
 <p>
  <xsl:call-template name="cr2br">
   <xsl:with-param name="text" select="text()" />
  </xsl:call-template>
 </p>
</xsl:template>

<xsl:template name="cr2br">
 <xsl:param name="text" />
 <xsl:variable name="textafterbreak" select="substring-after($text, '&#xA;')" />
 xsl:choose
  <xsl:when test="contains($text, '&#xA;')">
   <xsl:value-of select="substring-before($text, '&#xA;')" />
   <br />
   <xsl:call-template name="cr2br">
   <xsl:with-param name="text" select="$textafterbreak" />
   </xsl:call-template>
  </xsl:when>
  xsl:otherwise
   <xsl:value-of select="$text" />
  </xsl:otherwise>
 </xsl:choose>
</xsl:template>

Grüße
Thomas