Weihnachtsbert: <br/> erzeugen

Ein XML-Dokument

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

soll mit XSLT zu einem XHTML-Dokument

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

transformiert werden.

Ist das möglich? Wenn ja, wie?

  1. Hi,

    mit NotePad? Mit PHP? Mit Excel? Mit MSPaint? Oder etwa einfach nur mit "Suchen und Ersetzen" diverser Editoren?

    E7

    1. Hi,

      sorry, hab zu spät gesehen, dass du "XLST" angegeben hast, nix für ungut...

      E7

  2. 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

    1. Hi,

      <xsl:variable name="textafterbreak" select="substring-after($text, '&#xA;')" />

      Frage zum Verständnis des Templates:

      Wozu diese Variable?

      <xsl:with-param name="text" select="$textafterbreak" />

      Könnte man nicht hier

      <xsl:with-param name="text" select="substring-after($text, '&#xA;')" />

      verwenden, also direkt den substring?

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Hallo Andreas,

        <xsl:variable name="textafterbreak" select="substring-after($text, '&#xA;')" />

        Frage zum Verständnis des Templates:
        Könnte man nicht hier
        <xsl:with-param name="text" select="substring-after($text, '&#xA;')" />

        Doch man kann.
        Das ist ein altes Template von mir gewesen, vielleicht solle ich die Dinge auch wieder mal überprüfen ;-)

        Grüße
        Thomas