Subject: RE: [xsl] loop timing and result-document flush From: cknell@xxxxxxxxxx Date: Wed, 02 May 2007 10:22:20 -0400 |
We can't infer very much about the structure of your input document from the XSL you show. You appear to be trying to force a procedural style of programming onto a functional programming model (note how you are using xsl:for-each) If we could see the structure of your input document, we could almost certainly show you a simple, functional (rather than procedural), XSL-like method of solving your problem. -- Charles Knell cknell@xxxxxxxxxx - email -----Original Message----- From: Duane Gran <dmg2n@xxxxxxxxxxxx> Sent: Wed, 2 May 2007 10:05:55 -0400 To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: [xsl] loop timing and result-document flush XSL experts, I have an XSL which loops over a set of elements in search of links and creates a result document for the link. In some cases there is more than one link to the same anticipated document, so I use the doc- available() to test first for its existence before creating the file. This is intended to avoid a DynamicError related to writing more than one result document to the same URI. However, when I run the program against a large set of documents after 10 minutes or so I get the DynamicError. Below is the output (run via ant) along with some debugging fields I'll explain in a moment: [xslt] test for doc /Users/dgran/dev/rose/build/zoom/ 1-1861.wrenn.320-321.img.html available: false [xslt] creating file: /Users/dgran/dev/rose/build/ zoom/1-1861.wrenn.320-321.img.html [xslt] test for doc /Users/dgran/dev/rose/build/zoom/ 1-1861.wrenn.320-321.img.html available: false [xslt] creating file: /Users/dgran/dev/rose/build/ zoom/1-1861.wrenn.320-321.img.html [xslt] Failed to process /Users/dgran/dev/rose/deploy.temporary/ 1-1861.wrenn.rad.xml BUILD FAILED /Users/dgran/dev/rose/build.xml:395: The following error occurred while executing this line: /Users/dgran/dev/rose/build.xml:77: net.sf.saxon.trans.DynamicError: Cannot write more than one result document to the same URI: file:/ Users/dgran/dev/rose/build/zoom/1-1861.wrenn.320-321.img.html In the first case, the file (1-1861.wrenn.320-321.img.html) is correctly created because it doesn't exist yet. In the second case the doc-available() method should return true and skip the result- document command, but it fails to work. My hypothesis is that the result-document() method isn't finished flushing before the call to doc-available() is made. Assuming my guess is correct, is there a way in XSL to assure that the document is finished writing before continuing to the next iteration in the loop? Maybe there is another way of skinning this cat. I welcome suggestions. I'm using Saxon 8-7-3j. Below is a simplified version of my stylesheet: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="/"> <xsl:for-each select="ram|//repro|//page|//figure"> <xsl:variable name="zoomhtml"> <xsl:text>build/zoom/</xsl:text> <xsl:value-of select="@image"/> <xsl:text>.img.html</xsl:text> </xsl:variable> <xsl:message> test for doc <xsl:value-of select="$zoomhtml"/> available: <xsl:value-of select="doc-available($zoomhtml)"/> </xsl:message> <xsl:choose> <xsl:when test="doc-available($zoomhtml)"/> <xsl:otherwise> <xsl:message> creating file: <xsl:value-of select="$zoomhtml"/> </xsl:message> <xsl:result-document href="$zoomhtml"> </xsl:result-document> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> </xsl:stylesheet> Duane Gran
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] loop timing and result-do, Michael Kay | Thread | [xsl] XSL History, Wojciech Michalik |
RE: [xsl] loop timing and result-do, Colin Adams | Date | [xsl] XSL History, Wojciech Michalik |
Month |