2009-02-13 21 views

risposta

6

È possibile inviarlo nel foglio di stile dall'esterno utilizzando xsl:param. Quindi è necessario determinare quale sia il percorso corrente quando si richiama l'esterno;)

3

no ...
ma si potrebbe forse soluzione il problema utilizzando gli URL relativi e/o il passaggio di parametri nel foglio di stile.

1

Non AFAIK (sebbene si possa sempre passarlo come parametro alla trasformazione), ma non sono chiaro perché i percorsi relativi abbiano vinto " lavoro per te qui.

4

In msxsl su Windows, è possibile utilizzare l'estensione script come questo:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:user="http://tempuri.org/msxsl" 
> 

    <msxsl:script language="JScript" implements-prefix="user"> 
<![CDATA[ 
var fso = new ActiveXObject("Scripting.FileSystemObject"); 

function getCurrentPath(){ 
    return fso.GetFolder(".").Path 
} 
]]> 
    </msxsl:script> 

    <xsl:template match="/"> 
    <xsl:value-of select="user:getCurrentPath()"/> 
    </xsl:template> 

</xsl:stylesheet> 

Altri processori XSL supportano metodi simili per utilizzare risorse esterne (linguaggi di scripting, librerie di funzioni, ecc), quindi questo è solo un esempio.

+0

Non so perché questo fosse giù votato. Funziona davvero. – Tomalak

+2

Ci scusiamo per questo. Ho votato per l'utilizzo di un'estensione non standard, ma dopo aver aggiunto la mia risposta, mi sono reso conto che avevo suggerito la stessa cosa. Penso che non ci sia un modo "standard" per farlo. (Tranne l'uso dei parametri) –

+0

Grazie per aver spiegato il tuo ragionamento, molto apprezzato. :-) – Tomalak

2

Nella maggior parte dei processori XSLT, è possibile aggiungere funzioni personalizzate come estensioni. Ad esempio, ecco Saxon's documentation come farlo.

4

C'è un modo per ottenere il percorso corrente della cartella all'interno di un file xslt?

bisogno per individuare altri XML e XSLT file

Non c'è bisogno di alcuna funzione di estensione o anche parametri per farlo!

Qualsiasi relativi URL utilizzati nell'attributo href di un'istruzione <xsl:import> o <xsl:include> vengono risolti in base alla URL del foglio di stile XSLT corrente - ha solo bisogno di avere un URL, che viene indicato come vlearly vero nella domanda di cui sopra. Questo è molto comodo nell'importazione/inclusi i fogli di stile XSLT.

La funzionedocument()anche risolverà un URL relativo in modo simile, rendendo così qualsiasi documento XML aggiuntivo accessibile tramite URL anrelative.

Infine, eccoan examplecome questo impianti sono massicciamente utilizzati in una grande biblioteca di funzioni XSLT e modelli (FXSL 2.x):

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:f="http://fxsl.sf.net/" 
exclude-result-prefixes="xs xdt f" 
> 
<!-- 
     This module contains the FXSL versions of the "standard" XPath functions 

     These are intended as convenience functions, so that they can be passed 
     as parameters to other functions (e.g. to f:zipWith())     
     or curried and passed as parameters (e.g. to f:map())     
--> 

<xsl:import href="func-curry.xsl"/> 
<xsl:import href="func-compose-flist.xsl"/> 

<xsl:import href="func-standardArithmeticXpathFunctions.xsl"/> 
<xsl:import href="func-standardBooleanXpathFunctions.xsl"/> 
<xsl:import href="func-standardStringXpathFunctions.xsl"/> 
<xsl:import href="func-standardNodesXpathFunctions.xsl"/> 
<xsl:import href="func-standardSequencesXpathFunctions.xsl"/> 
<xsl:import href="func-standardAggregateXpathFunctions.xsl"/> 
<xsl:import href="func-standardDateTimeXpathFunctions.xsl"/> 
<xsl:import href="func-standardXSLTXpathFunctions.xsl"/> 
<xsl:import href="func-standardAxisXpathFunctions.xsl"/> 

</xsl:stylesheet> 
+0

Hai assolutamente ragione su importazioni, include, documenti e percorsi relativi. Estensioni o parametri sono stati suggeriti per ottenere solo la directory corrente. –

4

Questo può funzionare per la configurazione:

<xsl:value-of select="system-property('user.dir')"/> 

Ad esempio,

<xsl:value-of select="document(concat(system-property('user.dir'),'/',filename,'.xml'))//title[1]"/> 
Problemi correlati