[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] inserting structure
Subject: Re: [xsl] inserting structure From: Manfred Staudinger <manfred.staudinger@xxxxxxxxx> Date: Tue, 5 Jul 2005 23:31:21 +0200 |
> (it would be easier to understand if your variable names were more > meaningful than A and B). done > Note that you can usually rewrite > > <xsl:element name="p"> > ... > </xsl:element> > > as > > <p> > ... > </p> done > > > > 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> Thanks for this, I didn't really understand named templates. After some trial I decided to - split up the template into 3: processInputLines, insertParagraphs, and insertParagraphLines - retain LF (#xA) throughout the process - rely on concat and use string-length=0 as a switch - use the first parameter for input, the second for passing on - make the second parameter optional and give it a default length 0 I would appretiate your comments very much. Thank you, Manfred Staudinger <?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" omit-xml-declaration="yes" /> <xsl:template match="/"> <html lang="de" xml:lang="de"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Zeitungsbericht</title> <style type="text/css"> body { font-family: Verdana, sans-serif; } blockquote { margin: 0 0 0 2em; } p { text-indent: 2em; margin: 0; } blockquote > p:first-child { text-indent: 0 } </style> </head> <body> <xsl:call-template name="processInputLines"> <xsl:with-param name="string" select="string(doc)"/> </xsl:call-template> </body> </html> </xsl:template> <xsl:template name="insertParagraphLines"> <xsl:param name="paragraph" /> <xsl:choose> <xsl:when test="starts-with($paragraph, ' ')"> <xsl:value-of select="substring-before($paragraph, '
')" /> </xsl:when> <xsl:when test="starts-with($paragraph, 'fol.')"> <xsl:text>[</xsl:text> <xsl:value-of select="substring-before($paragraph, '
')" /> <xsl:text>]</xsl:text> </xsl:when> </xsl:choose> <xsl:choose> <xsl:when test="string-length($paragraph) > 0"> <xsl:call-template name="insertParagraphLines"> <xsl:with-param name="paragraph" select="substring-after($paragraph, '
')" /> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="insertParagraphs"> <xsl:param name="quote" /> <xsl:param name="paragraph" select="''" /> <xsl:choose> <xsl:when test="string-length($quote)=0 and string-length($paragraph)=0"> </xsl:when> <xsl:when test="string-length($paragraph)=0 or not(string-length($quote)=0 or string-length($paragraph)=0 or starts-with($quote, ' ') or starts-with($quote, '
'))"> <xsl:call-template name="insertParagraphs"> <xsl:with-param name="quote" select="substring-after($quote, '
')" /> <xsl:with-param name="paragraph" select="concat($paragraph, substring-before($quote, '
'), '
')" /> </xsl:call-template> </xsl:when> <xsl:when test="string-length($paragraph) > 0"> <p> <xsl:call-template name="insertParagraphLines"> <xsl:with-param name="paragraph" select="$paragraph" /> </xsl:call-template> </p> <xsl:call-template name="insertParagraphs"> <xsl:with-param name="quote" select="$quote" /> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="processInputLines"> <xsl:param name="string" /> <xsl:param name="quote" select="''" /> <xsl:choose> <xsl:when test="starts-with($string, '
') and string-length($quote)=0"> <xsl:call-template name="processInputLines"> <xsl:with-param name="string" select="substring-after($string, '
')" /> </xsl:call-template> </xsl:when> <xsl:when test="starts-with($string, ' ') or starts-with($string, 'fol.') or (starts-with($string, '
') and string-length($quote)>0)"> <xsl:call-template name="processInputLines"> <xsl:with-param name="string" select="substring-after($string, '
')" /> <xsl:with-param name="quote" select="concat($quote, substring-before($string, '
'), '
')" /> </xsl:call-template> </xsl:when> <xsl:when test="string-length($quote) > 0"> <blockquote> <xsl:call-template name="insertParagraphs"> <xsl:with-param name="quote" select="$quote" /> </xsl:call-template> </blockquote> <xsl:call-template name="processInputLines"> <xsl:with-param name="string" select="$string" /> </xsl:call-template> </xsl:when> <xsl:when test="string-length($string) = 0"> </xsl:when> <xsl:otherwise> <div><xsl:value-of select="substring-before($string, '
')" /></div> <xsl:call-template name="processInputLines"> <xsl:with-param name="string" select="substring-after($string, '
')" /> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] inserting structure, Michael Kay | Thread | [xsl] What's the difference between, Frans Englich |
Re: [xsl] only display if subnodes , David Carlisle | Date | Re: [xsl] only display if subnodes , David Carlisle |
Month |