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

RE: [xsl] Breaking up a large XML document into several smaller ones


Subject: RE: [xsl] Breaking up a large XML document into several smaller ones
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sat, 12 Jan 2008 08:42:04 -0000

A SAX solution would execute faster and in less memory but would take rather
longer to write.

It's not difficult in XSLT 2.0

<xsl:for-each-group select="widget" group-by="(position()-1) idiv 1000">
  <xsl:result-document href="widgets{position()}.xml">
    <widgets>
      <xsl:copy-of select="current-group()"/>
    </widgets>
  </xsl:result-document>
</xsl:for-each-group>

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

 

> -----Original Message-----
> From: Glen Mazza [mailto:glen.mazza@xxxxxxxxx] 
> Sent: 11 January 2008 14:49
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Breaking up a large XML document into several 
> smaller ones
> 
> Hello,
> 
> I searched the XSLT FAQ and could not find an answer to this. 
>  If only for proof-of-concept (we may find better solutions 
> not needing this), I am interested in breaking up a very 
> large XML document into multiple smaller ones, and was 
> wondering if XSLT would be a good solution for this.  For 
> example, if I have the following:
> 
> <order>
>    <widgets>
>        <widget.../>
>        <widget.../>
>        ... (about 100000 widgets) ...
>    </widgets>
> </order>
> 
> And, as output, I would like about hundred documents of 1000 
> widgets each, with the last document having the remainder 
> (possibly not 1000)
> widgets:
> 
> <order>
>    <widgets>
>        <widget../>     // widget #1
> 
>        <widget.../>    // widget #1000
>    </widgets>
> </order>
> 
> <order>
>    <widgets>
>        <widget../>     // widget #1001
> 
>        <widget.../>    // widget #2000
>    </widgets>
> </order>
> ...
> 
> Can this be done via XSLT, or would a SAX-based solution be 
> more appropriate, or?
> 
> Thanks,
> Glen


Current Thread
Keywords