xsl-list
[Top] [All Lists]

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

2008-01-11 08:13:56
On 11/01/2008, Glen Mazza <glen(_dot_)mazza(_at_)gmail(_dot_)com> wrote:
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?


XSLT 2.0 would be easiest and quickest to code here, but if you have
memory limitations then writing a sax based solution wouldn't to hard.

The XSLT would be something like:

<xsl:apply-templates select="/order/widgets/widget[position() mod 1000 = 1]"/>

<xsl:template match="widget">
  <xsl:result-document href="...">
    <order>
      <widgets>
        <xsl:copy-of select=".|following-sibling::widget[position() < 1000]"/>
     ...


cheers
-- 
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/

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