2015-06-01 28 views
7

Vorrei verificare se esiste un file con xslt 2.0. Tuttavia, non funziona. Ho provato questo:verifica se il file xml esiste con XSLT 2.0, saxon9HE

<xsl:choose> 
    <xsl:when test="doc(iri-to-uri(concat($currFolder, '/', $currSubFolder, '/', @href)))"> 

(il percorso è corretto)

tuttavia, questo si traduce in un errore, quando il file non sia lì.

e questo:

<xsl:choose> 
    <xsl:when test="doc-available(iri-to-uri(concat($currFolder, '/', $currSubFolder, '/', @href)))"> 

non funziona, mi dice che i file sono lì che chiaramente non esistono.

Qual è il modo corretto per farlo? Un modo affidabile per controllare, se esiste un file xml.

+0

Potete indicare l'esatta versione di Saxon 9 HE che non riesce con il test 'doc-available'? –

+0

Ho scaricato l'ultimo jar da qui http://sourceforge.net/projects/saxon/files/Saxon-HE/, quindi presumo che sia Saxon HE 9.6. – user3629892

risposta

3

Secondo this similar question, l'autore menziona che qualcosa come questo ha funzionato per loro fino a verificare l'esistenza di un file xml.

In questo momento, controlla singolarmente ciascuna cartella se il file non esiste in quella cartella, lo scrive sull'output, indipendentemente dal fatto che esista già in un'altra cartella precedente.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
    <xsl:variable name="currInput" select="tokenize(document-uri(.), '/')[last()]"/> 
    <xsl:choose> 
     <xsl:when test="doc-available(iri-to-uri(concat(.,'/',$currInput))) = fn:false()"></xsl:when>