[oXygen-user] Checking whether a file exists in XSLT

Lou Burnard lou.burnard at retired.ox.ac.uk
Fri Jan 13 05:02:57 CST 2017


Many thanks for taking the time to check! Your reassuring reply made me 
go and check how I was running the code, and yes, of course, I was 
running it in a context where that "base-uri(.)" was bound to cause 
confusion.

Thanks again!


On 13/01/17 07:49, Dr. Patrik Stellmann wrote:
> I just tested you code (also with oXygen 18.1 but with minimal modifications on a dita map) and it worked fine:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> exclude-result-prefixes="xs"
> version="3.0">
>
> <xsl:mode name="#default" on-no-match="shallow-skip"/>
>
> <xsl:template match="topicref">
> <xsl:variable name="filename" as="xs:string">
> <xsl:value-of select="@href"/>
> </xsl:variable>
> <xsl:variable name="resolvedFile" as="xs:anyURI"
> select="resolve-uri(@href, base-uri(.))"/>
> <xsl:message>
> <xsl:value-of select="concat($filename, ' resolves to ', $resolvedFile)"/>
> </xsl:message>
>
> <xsl:if test="not(fs:exists(fs:new($resolvedFile)))"
> xmlns:fs="java.io.File">
> <xsl:value-of select="concat($filename, '   Not Found')"/>
> </xsl:if>
> <xsl:text>
>           </xsl:text>
>
> </xsl:template>
>
> </xsl:stylesheet>
>
> I'd recommend you to create a similar minimal sample to make sure the problem lies really within this piece of code.
>
> Patrik
>
>
> ------------------------------------------------------------------
> Systemarchitektur & IT-Projekte
> Tel: +49 40 33449-1142
> Fax: +49 40 33449-1400
> E-Mail: mailto:Patrik.Stellmann at gdv-dl.de
>
> -----Ursprüngliche Nachricht-----
> Von: oXygen-user [mailto:oxygen-user-bounces at oxygenxml.com] Im Auftrag von Lou Burnard
> Gesendet: Donnerstag, 12. Januar 2017 19:59
> An: oxygen-user at oxygenxml.com
> Betreff: [oXygen-user] Checking whether a file exists in XSLT
>
> I need to write a stylesheet which checks the value of an attribute to see if it is the name of an existing file. You can't do it directly in XSLT of course, so I am following the advice of Mike Kay
> (https://www.oxygenxml.com/archives/xsl-list/200506/msg00400.html) and trying to do it with a java extension in an XSLT2 stylesheet. Here's the relevant template, which I run with saxon EE within oXygen 18.1
>
> <xsl:template match="tei:pb">
>           <xsl:variable name="filename" as="xs:string">
>               <xsl:value-of select="@facs"/>
>           </xsl:variable>
>           <xsl:variable name="resolvedFile" as="xs:anyURI"
>              select="resolve-uri(@facs, base-uri(.))"/>
>           <xsl:message>
>               <xsl:value-of select="concat($filename, ' resolves to ', $resolvedFile)"/>
>           </xsl:message>
>
>           <xsl:if test="not(fs:exists(fs:new($resolvedFile)))"
>               xmlns:fs="java.io.File">
>               <xsl:value-of select="concat($filename, '   Not Found')"/>
>           </xsl:if>
>           <xsl:text>
>           </xsl:text>
>
>       </xsl:template>
>
> The messages produced tell me that the filenames are being resolved correctly (they are all relative URLs like this
> ../../something/foo/foo.jpg) but the test always returns true, whether the file concerned exists or not. Am I missing something obvious? Or not obvious? This has been driving me nuts all day...
>
>
>
> _______________________________________________
> oXygen-user mailing list
> oXygen-user at oxygenxml.com
> https://www.oxygenxml.com/mailman/listinfo/oxygen-user
>
> GDV Dienstleistungs-GmbH & Co. KG
> Glockengießerwall 1
> D-20095 Hamburg
> www.gdv-dl.de
>
> Sitz und Registergericht: Hamburg
> HRA 93 894
> USt.-IdNr : DE 205183123
>
> Komplementärin:
> GDV Beteiligungsgesellschaft mbH
> Sitz und Registergericht: Hamburg
> HRB 71 153
>
> Geschäftsführer:
> Dr. Jens Bartenwerfer
> Michael Bathke
>
> ------------------------------------------------------------------
> Diese E-Mail und alle Anhänge enthalten vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe der E-Mail ist nicht gestattet.
>
> This e-mail and any attached files may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden.
> _______________________________________________
> oXygen-user mailing list
> oXygen-user at oxygenxml.com
> https://www.oxygenxml.com/mailman/listinfo/oxygen-user




More information about the oXygen-user mailing list