[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[Recent Entries]
[Reply To This Message]
Re: How to efficiently obtain the first 10 records of
On 19.07.2023 17:38, Martin Honnen martin.honnen@xxxxxx wrote:
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.

|
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format
RSS 2.0 |
|
Atom 0.3 |
|
|