Subject: Re: [xsl] How to efficiently obtain the first 10 records of a file with over 2 million records? From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 19 Jul 2023 15:50:18 -0000 |
On 19.07.2023 17:16, Roger L Costello costello@xxxxxxxxx wrote:
I have an XML file containing over 2 million <record> elements. I want to obtain the first 10 <record> elements.
Here's how I did it:
<xsl:for-each select="/Document/record[position() le 10]"> B B B B <xsl:sequence select="."/> </xsl:for-each>
I ran it and it took a long time to complete. I am guessing that the XSLT processor is iterating over all 2 million <record> elements. Yes?B How to write the XSLT code so that the XSLT processor stops iterating upon processing the first 10 <record> elements?
I am not sure whether you need an explicit
<xsl:mode streamable="yes"/>
<xsl:template match="/">
B <xsl:iterate select="Document/record">
B B B <xsl:copy-of select="."/>
B B <xsl:if test="position() eq 10">
B B B B <xsl:break/>
B B </xsl:if>
B </xsl:iterate>
</xsl:template>
to ensure that Saxon stops processing after the 10 records, run from the command line with -t and look for an early exit message to confirm.
I checked with the documentation https://www.saxonica.com/html/documentation12/streaming/partial-reading.html and an example, yes, it looks as if to get Saxon to stop parsing the complete document the xsl:iterate/xsl:break is needed.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to efficiently obtain, Martin Honnen martin | Thread | Re: [xsl] How to efficiently obtain, David Carlisle d.p.c |
Re: [xsl] How to efficiently obtain, Martin Honnen martin | Date | Re: [xsl] How to efficiently obtain, David Carlisle d.p.c |
Month |