RE: [xsl] why no indent here

Subject: RE: [xsl] why no indent here
From: "Tony Graham" <tgraham@xxxxxxxxxx>
Date: Mon, 12 Dec 2011 09:12:13 -0000 (GMT)
On Mon, December 12, 2011 8:42 am, Roelof Wobben wrote:
...
>> > <body>Naam : Tamara Wobben
>> > Geboorte gewicht : 2000 gram
>> > Geboorte lengte : 44 cm.
>> > Geboortedatum : 1 september 2005
>> >
>> > </body>
...
> and in the xhtml there are no <br> tags so to my knowlegde the linebreaks
> are not there.

I wouldn't expect there to be, but I would expect that the line breaks in
the original would be there if you did viewed 'Page Source' in your web
browser or opened the XHTML in a text editor.

>> You could output the content in a <pre>, though by default that would
>> come
>> out as monospaced text. You could then add CSS styles to use a
>> proportionally-spaced font with the <pre> if that's what you want.
>>
>> If you were using XSLT 2.0, you could use xsl:analyse-string to replace
>> the line breaks with <br /> elements. With XSLT 1.0, you could do much
>> the same thing with a recursive template that uses substring-before() to
>> find the text before the first line break, outputs that text and a <br
>> />,
>> then calls itself with the substring-after() the first line break. When
>> there's no more line breaks, the template would just output the
>> remaining
>> text.
>
> Oke, then I have to find or write myself such a recursive template that do
> that. Symphomny works with xslt 1.0

Neither approach is all that difficult, and the choice probably depends on
whether you need to show the indent of the second and subsequent lines:

---------------------------------
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    version="1.0">

<xsl:output
     method="xml"
     doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
     doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";
     omit-xml-declaration="yes"
     encoding="UTF-8"
     indent="yes" />

<xsl:template match="body">
  <div>
    <pre style="font-family: serif">
      <xsl:apply-templates />
    </pre>

    <p>
      <xsl:call-template name="add-br" />
    </p>
  </div>
</xsl:template>

<xsl:template name="add-br">
  <xsl:param name="text" select="." />

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

</xsl:stylesheet>
-----------------------------------------

produces:

-----------------------------------------
<!DOCTYPE div PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
<div>
  <pre style="font-family: serif">Naam : Tamara Wobben
         Geboorte gewicht : 2000 gram
         Geboorte lengte : 44 cm.
         Geboortedatum : 1 september 2005

</pre>
  <p>Naam : Tamara Wobben <br />
         Geboorte gewicht : 2000 gram <br />
         Geboorte lengte : 44 cm. <br />
         Geboortedatum : 1 september 2005<br />
<br />
</p>
</div>
-------------------------------------------

Regards,


Tony Graham                                   tgraham@xxxxxxxxxx
Consultant                                 http://www.mentea.net
Mentea       13 Kelly's Bay Beach, Skerries, Co. Dublin, Ireland
 --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --
    XML, XSL-FO and XSLT consulting, training and programming

Current Thread