Subject: [XSLT Streaming] How do I know that my input document was processed in a streaming fashion?
From: "Costello, Roger L." <costello@xxxxxxxxx>
Date: Tue, 27 Aug 2013 19:02:57 +0000
|
Hi Folks,
I want to count the number of Book elements in BookCatalogue.
I want to do it using XSLT Streaming.
Below are two solutions. One uses <xsl:stream>, the other uses <xsl:mode>.
Two Questions Please:
1. Are my two solutions equivalent?
2. I ran my solutions and they produced the correct result. They ran fast, but
the input document is small (only 3 Books). How do I know that the input
document was actually processed in a streaming fashion?
I am running the transformations using the latest version of oXygen XML.
/Roger
-----------------------------------------------------------------------------
-----------------
Specify that stream processing is desired by embedding the
instructions within a <xsl:stream> element:
-----------------------------------------------------------------------------
-----------------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:output method="xml" />
<xsl:template match="/">
<xsl:stream href="BookCatalogue.xml">
<count>
<xsl:for-each select="BookCatalogue">
<xsl:iterate select="Book">
<xsl:param name="count" select="0" as="xs:decimal"/>
<xsl:next-iteration>
<xsl:with-param name="count" select="$count+1"/>
</xsl:next-iteration>
<xsl:on-completion>
<xsl:value-of select="$count"/>
</xsl:on-completion>
</xsl:iterate>
</xsl:for-each>
</count>
</xsl:stream>
</xsl:template>
</xsl:stylesheet>
-----------------------------------------------------------------------------
-----------------
Specify that stream processing is desired by specifying streaming
in the initial mode:
-----------------------------------------------------------------------------
-----------------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:output method="xml" />
<xsl:mode streamable="yes" />
<xsl:template match="BookCatalogue">
<count>
<xsl:iterate select="Book">
<xsl:param name="count" select="0" as="xs:decimal"/>
<xsl:next-iteration>
<xsl:with-param name="count" select="$count+1"/>
</xsl:next-iteration>
<xsl:on-completion>
<xsl:value-of select="$count"/>
</xsl:on-completion>
</xsl:iterate>
</count>
</xsl:template>
</xsl:stylesheet>
|