[xsl] Re: (Probably trivial) grouping problem

Subject: [xsl] Re: (Probably trivial) grouping problem
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Sat, 19 Jul 2003 12:38:50 +0200
Use the following transformation:

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

 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:strip-space elements="*"/>

 <xsl:key  name="kFollParas" match="para[not(@title)]"
  use="generate-id(preceding-sibling::para[@title][1])"/>

  <xsl:template match="para[@title]">
    <section>
      <title><xsl:value-of select="@title"/></title>
      <para><xsl:value-of select="."/></para>
      <xsl:copy-of select="key('kFollParas', generate-id())"/>
    </section>
  </xsl:template>
  <xsl:template match="para[not(@title)]"/>
</xsl:stylesheet>


When applied on your source.xml:

<text>
  <para title="title1">
        some text
  </para>
  <para>
        a para without a title
  </para>
  <para title="title2">
        more text
  </para>
  <para>
        yet another untitled para
  </para>
</text>


the wanted result is produced:

<section>
   <title>title1</title>
   <para>
        some text
  </para>
   <para>
        a para without a title
  </para>
</section>
<section>
   <title>title2</title>
   <para>
        more text
  </para>
   <para>
        yet another untitled para
  </para>
</section>


Hope this helped.


=====
Cheers,

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

"Stefan Tilkov" <stefan.tilkov@xxxxxxxxx> wrote in message
news:OFF1F431D7.102B9DE9-ONC1256D68.002AEF58-C1256D68.002AFA73@xxxxxxxxxxxx
> I can't for the life of me figure out how to solve a simple problem. I
> know that it is related to grouping, but my XSL (and XPath) knowlegde is
> not up to translating answers given to similar problems to my particular
> case.
>
> I have a couple of paragrahps, marked up this way:
>
> <para title="title1">
>         some text
> </para>
> <para>
>         a para without a title
> </para>
> <para title="title2">
>         more text
> </para>
> <para>
>         yet another untitled para
> </para>
>
> I want to turn them into this:
>
> <section>
>         <title>title1</title>
>         <para>
>                 some text
>         </para>
>         <para>
>                 a para without a title
>         </para>
> </section>
> <section>
>         <title>title2</title>
>         <para>
>                 more text
>         </para>
>         <para>
>                 yet another untitled para
>         </para>
> </section>
>
> That is, I want to create sections from paragraphs, turning the title into
> an element belonging to the section. My experiments with following-sibling
> and preceeding-sibling all had the problem that *all* paragraphs without a
> title were returned, and I somehow need to get access to only those before
> the next para with a title.
>
> Any help would be greatly appreciated.
>
> Stefan
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>




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


Current Thread