xsl-list
[Top] [All Lists]

RE: inserting structure

2005-07-03 07:31:42
I did this because i did not know how and wanted to show the 
intention. Thanks
to your hint I wrote a solution based on xsl:element, see below.

This is now looking reasonably sensible, though I can't follow the logic in
detail (it would be easier to understand if your variable names were more
meaningful than A and B).

Note that you can usually rewrite

<xsl:element name="p">
...
</xsl:element>

as

<p>
...
</p>

(there's a minor difference in the handling of namespaces).

 
Also the recursive template prevents me from adding html 
header information.
I still don't know how to do this.

I would write this as

<xsl:template match="/">
  <html><head>...</head>
  <body>
    <xsl:call-template name="replaceLineBreaks">
      <xsl:with-param name="string" select="string(doc)"/>
    </xsl:call-template>
  </body>
  </html>
</xsl:template>

<xsl:template name="replaceLineBreaks">
  ...
</xsl:template>

Michael Kay
http://www.saxonica.com/



Best regards, Manfred


<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method = "html" />
<xsl:template match="/" name="replaceLineBreaks">
<xsl:param name="string" select="." />
<xsl:param name="switch" select="0" />
<xsl:param name="A" select="." />
<xsl:choose>
   <xsl:when test="contains($string, '&#xA;')">
      <xsl:choose>
         <xsl:when test="starts-with($string, '      ')">
            <xsl:element name="p">
               <xsl:value-of select="substring-before($A, $string)" />
        </xsl:element>
            <xsl:call-template name="replaceLineBreaks">
               <xsl:with-param name="string"
select="substring-after($string, '&#xA;')" />
               <xsl:with-param name="switch" select="1" />
               <xsl:with-param name="A" select="$string" />
            </xsl:call-template>
         </xsl:when>
         <xsl:when test="starts-with($string, '   ') and $switch=0">
            <xsl:call-template name="replaceLineBreaks">
               <xsl:with-param name="string"
select="substring-after($string, '&#xA;')" />
               <xsl:with-param name="switch" select="1" />
               <xsl:with-param name="A" select="$string" />
            </xsl:call-template>
         </xsl:when>
         <xsl:when test="starts-with($string, '   ') and $switch=1">
            <xsl:call-template name="replaceLineBreaks">
               <xsl:with-param name="string"
select="substring-after($string, '&#xA;')" />
               <xsl:with-param name="switch" select="1" />
               <xsl:with-param name="A" select="$A" />
            </xsl:call-template>
         </xsl:when>
         <xsl:when test="starts-with($string, 'fol.')">
            <xsl:variable name = "B" >
               <xsl:value-of select="substring-before($A, $string)" />
               <xsl:text>[</xsl:text>
               <xsl:value-of 
select="substring-before($string, '&#xA;')" />
               <xsl:text>]</xsl:text>
               <xsl:value-of select="substring-after($string, 
'&#xA;')" />
            </xsl:variable>
            <xsl:call-template name="replaceLineBreaks">
               <xsl:with-param name="string"
select="substring-after($string, '&#xA;')" />
               <xsl:with-param name="switch" select="1" />
               <xsl:with-param name="A" select="$B" />
            </xsl:call-template>
         </xsl:when>
         <xsl:otherwise>
            <xsl:if test="$switch=1">
           <xsl:element name="p">
                  <xsl:value-of select="substring-before($A, 
$string)" />
           </xsl:element>
            </xsl:if>
            <div><xsl:value-of select="substring-before($string,
'&#xA;')" /></div>
            <xsl:call-template name="replaceLineBreaks">
               <xsl:with-param name="string"
select="substring-after($string, '&#xA;')" />
               <xsl:with-param name="switch" select="0" />
               <xsl:with-param name="A"
select="substring-after($string, '&#xA;')" />
            </xsl:call-template>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:when>
   <xsl:when test="$switch=1">
      <xsl:element name="p">
         <xsl:value-of select="$A" />
      </xsl:element>
   </xsl:when>
   <xsl:otherwise>
      <div><xsl:value-of select="$string" /></div>
   </xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>