xsl-list
[Top] [All Lists]

RE: Test if an (image) file exists

2005-06-08 13:36:32

I'd like to test if image files exist in a target directory on my file
system before adding links to them in html output (I need to check on
$filename.jpg or $filename.gif and other variations.) Should 
I use a Java
extension function in my XSLT or are there now better ways to 
do this with
in-built XSLT functions, using unparsed-text() for example? 

You need to use extension functions. Assuming that the reference to the
image is in an attribute called @src, and that it takes the form of a
relative URI (relative to the document that contains the reference), you
will need something like this:

<xsl:variable name="absoluteURI" select="resolve-uri(@src, base-uri(.))"
as="xs:anyURI"/>
<xsl:if test="file:exists(file:new($absoluteURI))"
xmlns:file="java(_at_)java(_dot_)io(_dot_)File">...

But if I pass this template a filename (xs:string) I get the following
error:

"There is more than one method matching the function call 
file:new, and
there is insufficient type information to determine which one 
should be used." 

Java provides File.new(string) and File.new(URI), so Saxon needs to know at
compile time whether the argument is a string or a URI. In this case the
function was called as file:new($param) where $param was declared as

<xsl:param name="param"/>

with no type information. You can probably fix the problem by changing the
declaration to

<xsl:param name="param" as="xs:string"/>

or by writing the function call as file:new($param as xs:string)

(or use xs:anyURI if that's what it is)

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






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



<Prev in Thread] Current Thread [Next in Thread>