I have done some testing with a style sheet that uses the document function
with an empty string as its only argument.  The document('') call errors out
complaining 'SystemId Unknown' if I invoke newTransformer as follows:

Transformer transformer = tFactory.newTransformer(new StreamSource(new
FileInputStream("media.xsl")));

instead of:

Transformer transformer = tFactory.newTransformer(new
StreamSource("media.xsl"));

I first noticed this behavior when I tried to execute the transform from a
JSTL <x:transform> tag

Is it true that Xalan cannot reference the stylesheet document tree unless
it got the document from a URI in the first place?  I don't see any such
limitation in the specification or the documentation. 

Relevant excerpt from spec:
Note that a zero-length URI reference is a reference to the document
relative to which the URI reference is being resolved; thus document("")
refers to the root node of the stylesheet; the tree representation of the
stylesheet is exactly the same as if the XML document containing the
stylesheet was the initial source document

Has anyone else seen this behavior?  Is it correct?

The stylesheet is pretty vanilla as I was just testing the concept.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0" xmlns:Media="Media directory lookup table.">
    <xsl:output indent="yes" method="xml"/>
    <Media:Dirs>
        <Media:Dir path="simple">
            <Media:File name="simple-One.jpg"/>
            <Media:File name="simple-Two.jpg"/>
            <Media:File name="simple-Three.jpg"/>
        </Media:Dir>
        <Media:Dir path="bin/dirOne">
            <Media:File name="dirOne-One.jpg"/>
            <Media:File name="dirOne-Two.jpg"/>
            <Media:File name="dirOne-Three.jpg"/>
        </Media:Dir>
        <Media:Dir path="bin/dirTwo">
            <Media:File name="dirTwo-One.jpg"/>
            <Media:File name="dirTwo-Two.jpg"/>
            <Media:File name="dirTwo-Three.jpg"/>
        </Media:Dir>
        <Media:Dir path="bin/dirThree">
            <Media:File name="dirThree-One.jpg"/>
            <Media:File name="dirThree-Two.jpg"/>
            <Media:File name="dirThree-Three.jpg"/>
        </Media:Dir>
        <Media:Dir path="bindata/media/digisign/fullscreenimages/">
            <Media:File name="big.jpg"/>
            <Media:File name="medium.jpg"/>
            <Media:File name="little.jpg"/>
        </Media:Dir>
    </Media:Dirs>
    
<!-- Root -->
    <xsl:template match="*">
        <xsl:copy-of
select="document('')/*/Media:Dirs/Media:Dir/Media:File"></xsl:copy-of>
    </xsl:template>
</xsl:stylesheet>


-- 
View this message in context: 
http://www.nabble.com/document%28%27%27%29-tf2884411.html#a8058848
Sent from the Xalan - J - Users mailing list archive at Nabble.com.

Reply via email to