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