Reputation: 533
I would like to check in XSLT whether an HTML file exists or not. How can I do this? I have already tried the file-exists.xsl from here https://gist.github.com/emth/4531924 but it doesn't work for me. I've been trying to get it running for over 2 hours now, but I am stuck. Here's my ant snippet:
<target name="transform">
<xslt in="/tmp/sample.xml" out="/tmp/out.html" style="/tmp/sample.xsl" />
</target>
and this is my xslt file:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:java="http://www.java.com/">
<xsl:import href="file-exists.xsl"/>
...
<xsl:if test="java:file-exists('myfile.html', base-uri())">
<!-- do something here... -->
</xsl:if>
....
Running this with ant I will get the following error:
[xslt] Processing /tmp/sample.xml to /tmp/out.html
[xslt] Loading stylesheet /tmp/sample.xsl
[xslt] : Error! The first argument to the non-static Java function 'fileExists' is not a valid object reference.
[xslt] : Error! Cannot convert data-type 'void' to 'boolean'.
[xslt] : Fatal Error! Could not compile stylesheet
[xslt] Failed to process /tmp/sample.xml
Can anybody provide me a running example or is there any other alternative? Thanks!
Upvotes: 5
Views: 6856
Reputation: 533
I've found a solution:
<xsl:when test="fs:exists(fs:new('myfile.html'))" xmlns:fs="java.io.File">
<!-- do something here... -->
</xsl:when>
and it works independently of XSLT 1.0 or 2.0
Upvotes: 6
Reputation: 12729
If the file is a text file, you can use the XSLT 2.0 function:
fn:func-unparsed-text-available()
The fn:unparsed-text-available function determines whether a call on the fn:unparsed-text function with identical arguments would return a string. The function will attempt to read the resource identified by the URI, and check that it is correctly encoded and contains no invalid characters.
This is similar to fn:doc-available()
which works on XML documents instead.
Upvotes: 3