xsl-list
[Top] [All Lists]

RE: Using Saxon 8.5 and collection() to process a directory of XML files

2005-08-05 09:08:56
 
I now have Saxon 8.5b processing a directory of xml files and 
generating the required html files, using the following:

<xsl:for-each select="collection(concat($xmlDir, '?select=*.xml'))">
    <xsl:result-document href="{$outputDir}/{$fileName}.html">
      ...
    </xsl:result-document>
    <xsl:for-each select="saxon:discard-document(.)" /> 
</xsl:for-each>

-Am I using saxon:discard-document() correctly... Seems odd?

There's a danger Saxon will optimize it out if you use it in 
a context where the result of the function (which is the same 
as the input) isn't used. So a safer usage is:

<xsl:for-each select="collection(concat($xmlDir, '?select=*.xml'))">
    <xsl:for-each select="saxon:discard-document(.)">
    <xsl:result-document href="{$outputDir}/{$fileName}.html">
      ...
    </xsl:result-document>
  </xsl:for-each>
</xsl:for-each>

or you could tag it on to the outer for-each:

 <xsl:for-each select="collection(concat($xmlDir,
'?select=*.xml'))/saxon:discard-document(.)">

I don't think the any keys generated for each document are being discarded
with it.  For example:

<xsl:for-each select="collection(concat($xmlDir, '?select=*.xml'))">
        <xsl:if test="saxon:discard-document(.)">Discarded.</xsl:if>
</xsl:for-each>

This seems to work fine, memory usage hovers around the same amount.  If a
call to a key is added:

<xsl:for-each select="collection(concat($xmlDir, '?select=*.xml'))">
        <xsl:value-of select="key('somekey','someval')"/>
        <xsl:if test="saxon:discard-document(.)">Discarded.</xsl:if>
</xsl:for-each>

Memory usage grows until an OutOfMemoryError is thrown.

Is there a workaround for this?


-Is it possible to continue the processing should one of the source 
files contain an error (say a parse error)?


Yes, there's a query parameter 
?select=*.xml;on-error=ignore|warning|fail

This works well, thanks.

andrew.

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