You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2004/02/19 18:37:01 UTC
DO NOT REPLY [Bug 25453] -
Redirect does not append to file
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=25453>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=25453
Redirect does not append to file
minchau@ca.ibm.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |INVALID
------- Additional Comments From minchau@ca.ibm.com 2004-02-19 17:37 -------
There are a few problems with your stylesheet.
When I run similar transformations to this one an output file
named "$outputfile" is created. I think you want the output file
named "doc3.out". So the first problem is that your variable should be defined
like this:
<xsl:variable name="outputfile" select="'doc3.out'"/>
Note the extra single-quotes inside the double-quotes
The element <redirect:close file="$outputfile"/> is not inside of any
<template> element, this is wrong, it can not be a top level element like this
(Xaalan should have complained about this).
Also the variable outputfile is not in scope for this <redirect:close>.
I didn't look at what happens underneath it all, but I'd guess that you may be
trying to open the same file multiple times all with an append mode and only
one of those should succeed. I think the <xsl:close> element should be inserted
at the correct depth and location corresponding to the <redirect:open>. If
you open in append mode, write, then close things should be better for the next
cycle of open in append mode,write,close.
Because your <xsl:close> is in the wrong place some buffers seem to not be
flushed and the output never makes it to the file system. Here is a re-work of
your sample XSL using your input XML that works for me:
---------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:lxslt="http://xml.apache.org/xslt"
xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
extension-element-prefixes="redirect">
<xsl:template match="/">
<out>
default output
<xsl:apply-templates/>
</out>
</xsl:template>
<xsl:template match="/address_object/address">
<xsl:for-each select="/address_object/address">
<xsl:variable name="outputfile" select="'doc34.out'" />
<redirect:open file="{$outputfile}" append="yes" />
<redirect:write file="{$outputfile}" append="yes" >
<address>
<xsl:apply-templates/>
</address>
</redirect:write>
<redirect:close file="{$outputfile}"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
---------------------------------------
Regards,
Brian Minchau