xsl-list
[Top] [All Lists]

Re: [xsl] Grouping by attribute

2009-10-19 18:09:09
Thanks! I've been testing it a bit now and it works as expected.

I'm having a little trouble mixing it with some of my other templates
used on other parts of the document but I'll probably figure it out.
Or else, I'll ask.

Regards
Jostein

2009/10/19 Michael Kay <mike(_at_)saxonica(_dot_)com>:
The essence of the solution is

<xsl:template match="contentSection">
 <h1>Title</h1>
 <xsl:for-each-group select="*" group-starting-with="headline">
   <xsl:choose>
     <xsl:when test="headline">
       <level2>
         <xsl:apply-templates select="current-group()"/>
       </level2>
     </xsl:when>
     <xsl:otherwise>
       <xsl:apply-templates select="current-group()"/>
     </xsl:otherwise>
   </
 </
</

Regards,

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

-----Original Message-----
From: Jostein Austvik Jacobsen [mailto:josteinaj(_at_)gmail(_dot_)com]
Sent: 19 October 2009 13:18
To: xsl-list
Subject: [xsl] Grouping by attribute

I've got this flat-structured XML:

<document>
  <metaData>
    <title>Title</title>
    <publisher>Publisher</publisher>
  </metaData>
  <contentSection>
    <p>text</p>

    <headline level="2">Headline</headline>
    <p>text</p>
    <p>text</p>

    <headline level="2">Section</headline>
    <p>text</p>
    <pagenum id="page2"/>
    <p>text</p>
    <headline level="3">Subsection</headline>
    <p>text</p>

    <headline level="2">Section</headline>
    <p>text</p>
    <p>text</p>
  </contentSection>
</document>

And want it transformed to this XML:

<body>
  <level1>
    <h1>Title</h1>
    <p>text</p>

    <level2>
      <h2>Headline</h2>
      <p>text</p>
      <p>text</p>
    </level2>

    <level2>
      <h2>Section</h2>
      <p>text</p>
      <pagenum id="page2"/>
      <p>text</p>
      <level3>
        <h3>Subsection</h3>
        <p>text</p>
      </level3>
    </level2>

    <level2>
      <h2>Section</h2>
      <p>text</p>
      <p>text</p>
    </level2>
  </level1>
</body>

How would I do that using XSLT? XSLT 2.0 solutions are ok.

Regards
Jostein

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



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