[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] empty element as an end-marker


Subject: Re: [xsl] empty element as an end-marker
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Fri, 28 Mar 2003 00:44:30 -0800 (PST)

> my problem is easily explained. This is the simple xml:
> 
> <p>some text some text <pb/>more text more text</p>
> 
> In my (html) output I need to process and reproduce the 'some text'
> (ie. up
> to the <pb/>) without the 'more text'. (Of course I also need to
> output
> just
> the 'more text' in another instance.) I'm having some trouble with
> this.
> Also the 'some text' contains tags which need to be processed by the
> stylesheet.

The following is an outline of a general way to process groups of nodes
delimited by a specific element. This transformation:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="/">
    <xsl:apply-templates select="/*/p/pb"/>
  </xsl:template>
  
  <xsl:template match="p/pb">
    <xsl:element name="group{position()}">
      <xsl:apply-templates 
      select="preceding-sibling::node()[not(self::pb)]
                       [generate-id(following-sibling::pb)
                       = 
                        generate-id(current())
                        ]"/>
    </xsl:element>
    <xsl:if test="position() = last()">
      <xsl:element name="group{position() + 1}">
        <xsl:apply-templates select="following-sibling::node()"/>
      </xsl:element>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

when applied on this source.xml:

<html>
  <p>some text1 some text1 
  <pb/>more text2 more text2
  <pb/>more text3 more text3
  </p>
</html>

produces:

<group1>some text1 some text1 
  </group1>
<group2>more text2 more text2
  </group2>
<group3>more text3 more text3
  </group3>

As we see, all nodes between two consecutive markers will be processed
as a group.





=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL

__________________________________________________
Do you Yahoo!?
Yahoo! Platinum - Watch CBS' NCAA March Madness, live on your desktop!
http://platinum.yahoo.com

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread