2009-02-13 12 views
12

Gibt es eine Möglichkeit, den aktuellen Ordnerpfad aus einer XSLT-Datei zu erhalten?xslt Abrufen der Datei aktuellen Ordner Pfad

Benötigen Sie es, andere Xml und Xslt-Dateien zu suchen. Wir haben verschiedene Kundenordner und müssen die richtigen Dateien finden.

Prost

Antwort

6

Sie können es von außen unter Verwendung xsl:param in das Stylesheet senden. Dann müssen Sie feststellen, was der aktuelle Pfad ist, wenn die von außen aufgerufen wird;)

3

no ...
aber man konnte das Problem mit relativen URLs und/oder Übergabe von Parametern in das Stylesheet möglicherweise umgehen.

1

Nicht AFAIK (obwohl Sie es immer als Parameter für die Transformation übergeben können), aber ich bin nicht klar, warum relative Pfade gewonnen ' Ich arbeite hier für Sie.

4

In MSXSL auf Windows können Sie ein Skript Erweiterung wie folgt verwenden:

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

Andere XSL-Prozessoren ähnliche Methoden unterstützen externe Ressourcen zu nutzen (Skriptsprachen, Funktionsbibliotheken etc.), so ist dies nur ein Beispiel.

+0

Nicht sicher, warum dies abgelehnt wurde. Es funktioniert tatsächlich. – Tomalak

+2

Entschuldigung dafür. Ich habe es abgelehnt, weil ich eine nicht standardmäßige Erweiterung verwendet habe, aber nachdem ich meine Antwort hinzugefügt hatte, wurde mir klar, dass ich dasselbe vorgeschlagen hatte. Ich denke, es gibt keinen "normalen" Weg, dies zu tun. (Außer mit params) –

+0

Danke für die Erklärung Ihrer Argumentation, sehr geschätzt. :-) – Tomalak

2

In den meisten XSLT-Prozessoren können Sie benutzerdefinierte Funktionen als Erweiterungen hinzufügen. Zum Beispiel ist hier Saxon's documentation wie man das macht.

4

Gibt es eine Möglichkeit, den aktuellen Ordnerpfad aus einer XSLT-Datei zu erhalten?

Du möchtest andere XML und XSLT Dateien

Keine Notwendigkeit für jegliche Erweiterungsfunktionen oder sogar Parameter finden, das zu tun!

Alles relativ URLs im href Attribute einer <xsl:import> oder <xsl:include> Anweisung verwendet werden, auf der URL des aktuellen XSLT-Stylesheet aufgelöst basiert - es braucht nur eine URL zu haben, die als vlearly angegeben stimmt in der obigen Frage. Dies ist sehr praktisch beim Importieren/Einschließen von XSLT Stylesheets.

Diedocument()Funktion wird auch eine relative URL in ähnlicher Weise, löst somit jedes zusätzliches XML-Dokument zugänglich mit anrelative URL zu machen.

Schließlich ist hieran example, wie diese Einrichtungen massiv in einer großen Bibliothek verwendet werden von XSLT-Funktionen und Vorlagen (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

Sie haben absolut Recht mit Importen, Includes, Dokumenten und relativen Pfaden. Erweiterungen oder Parameter wurden vorgeschlagen, um nur das aktuelle Verzeichnis zu erhalten. –

4

Dies kann für Ihr Setup arbeiten:

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

Zum Beispiel

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