xsl-list
[Top] [All Lists]

RE: Convert html:br to paragraphs

2005-06-01 18:08:02
Gregor,

If all <br/> elements are children of <body>, the following will work. On your input:

<body>1. para is here <br/>
2. para is here and <b>bold</b> or another
inline element </body>

This XSL (inspired by http://www.biglist.com/lists/xsl-list/archives/200505/msg00146.html, which I've since learned is a fairly well-known technique):

<?xml version="1.0" encoding="iso8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="body">
       <xsl:copy>
           <xsl:call-template name="wrap">
               <xsl:with-param name="n" select="node()[1]"/>
           </xsl:call-template>
       </xsl:copy>
   </xsl:template>

   <xsl:template name="wrap">
       <xsl:param name="n" select="/.."/>
       <xsl:param name="a" select="/.."/>
       <xsl:choose>
           <xsl:when test="$n[self::br]">
               <p><xsl:copy-of select="$a"/></p>
               <xsl:call-template name="wrap">
<xsl:with-param name="n" select="$n/following-sibling::node()[1]"/>
               </xsl:call-template>
           </xsl:when>
           <xsl:when test="$n">
               <xsl:call-template name="wrap">
<xsl:with-param name="n" select="$n/following-sibling::node()[1]"/>
                   <xsl:with-param name="a" select="$a|$n"/>
               </xsl:call-template>
           </xsl:when>
           <xsl:otherwise>
               <p><xsl:copy-of select="$a"/></p>
           </xsl:otherwise>
       </xsl:choose>
   </xsl:template>

</xsl:stylesheet>

produces:

<?xml version="1.0" encoding="UTF-8"?>
<body>
 <p>1. para is here </p>
 <p>
2. para is here and <b>bold</b> or another
inline element </p>
</body>

If <br> elements could occur at any depth ... see this thread: http://www.biglist.com/lists/xsl-list/archives/200505/msg01413.html

Regards,

--A


i have to convert <br/> structured html sites into documents with a
paragraph structure.

that means:

<body>1. para is here <br/>
2. para is here and <b>bold</b> or another
inline element </body>

has to be:

<p>1. para is here</p>
<p>2. para is here and <b>bold</b> or another
inline element</p>

_________________________________________________________________
Don?t just search. Find. Check out the new MSN Search! http://search.msn.click-url.com/go/onm00200636ave/direct/01/


--~------------------------------------------------------------------
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>