If you're asking about XQuery 1.0, the answer is no, unless you regard the 
solution using recursion as elegant.

In XQuery 3.0 there are "tumbling windows" which give you the capability of 
XSLT's group-starting-with, and a lot more besides.

Michael Kay
Saxonica

On 19 Nov 2013, at 18:47, Geert Josten <[email protected]> wrote:

> Just wondering, is there an elegant way of doing something like this in
> XQuery?
> 
>    <xsl:stylesheet version="2.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>               <xsl:output indent="yes"/>
>               <xsl:strip-space elements="*"/>
> 
>               <xsl:template match="@*|node()">
>                       <xsl:copy>
>                               <xsl:apply-templates select="@*|node()"/>
>                       </xsl:copy>
>               </xsl:template>
> 
>               <xsl:template match="P">
>                       <xsl:variable name="P" select="."/>
>                       <xsl:for-each-group select="node()"
> group-starting-with="pg">
>                               <xsl:apply-templates select="self::pg"/>
>                               <xsl:element name="{node-name($P)}">
>                                       <xsl:apply-templates
> select="$P/@*|current-group()[not(self::pg)]"/>
>                               </xsl:element>
>                       </xsl:for-each-group>
>               </xsl:template>
> 
>    </xsl:stylesheet>
> 
> Example input:
> 
> <Docs>
>    <Doc>
>        <P>blah blah blah<pg>1</pg>blah blah</P>
>        <P>blah blah blah<pg>2</pg>blah blah</P>
>    </Doc>
>    <Doc>
>        <P>blah blah blah<pg>3</pg>blah blah</P>
>        <P>blah blah blah<pg>4</pg>blah blah</P>
>    </Doc>
> </Docs>
> 
> Cheers,
> Geert
> 
> M.Sc. G.P.H. (Geert) Josten
> Senior Developer
> 
> 
> Dayon B.V.
> Delftechpark 37b
> 2628 XJ Delft
> The Netherlands
> 
> T +31 (0)88 26 82 570
> 
> [email protected]
> www.dayon.nl
> 
> De informatie - verzonden in of met dit e-mailbericht - is afkomstig van
> Dayon BV en is uitsluitend bestemd voor de geadresseerde. Indien u dit
> bericht onbedoeld hebt ontvangen, verzoeken wij u het te verwijderen. Aan
> dit bericht kunnen geen rechten worden ontleend.
> _______________________________________________
> [email protected]
> http://x-query.com/mailman/listinfo/talk


_______________________________________________
[email protected]
http://x-query.com/mailman/listinfo/talk

Reply via email to