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

Subject: RE: [xsl] Using Saxon 8.5 and collection() to process a directory of XML files
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 5 Aug 2005 14:15:06 +0100
> 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(.)">
> 
> -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

(In fact, ignore isn't totally working yet: XML parser errors are reported
even if they are then ignored)

Michael Kay
http://www.saxonica.com/

Current Thread