2009-02-13 18 views
12

Geçerli klasör yolunu xslt dosyasından almanın bir yolu var mı?xslt dosya geçerli klasör yolunu al

Diğer xml ve xslt dosyalarını bulmak için gerekir. Farklı müşteri klasörlerine sahibiz ve doğru dosyaları başarıyla bulmamız gerekiyor.

Alkış

cevap

6

xsl:param'u kullanarak dışardan stil sayfasından gönderebilirsiniz. Daha sonra, dışarıdan çağırarak geçerli yolun ne olduğunu belirlemelisiniz;)

3

hayır ...
ama belki göreli URL'ler kullanarak ve/veya stil sayfası içine parametreler geçen sorunun geçici çözümü olabilir.

1

AFAIK değil (her ne kadar bunu dönüşüme bir param olarak gösterebilirsiniz), fakat göreceli yolların neden kazandığını açıklamıyorum. Burada senin için çalışıyorum. Windows üzerinde msxsl olarak

4

, böyle bir senaryo uzantısını kullanabilirsiniz:

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

Diğer XSL işlemciler harici kaynakları (betik dilleri, fonksiyon kütüphaneleri vs.) kullanmak için benzer yöntemler desteklemek, bu nedenle bu sadece bir olduğunu örnek.

+0

Bunun neden reddedildiğinden emin değil. Aslında çalışıyor. – Tomalak

+2

Bunun için üzgünüm. Standart olmayan uzantıyı kullanmam için oy verdim, ancak cevabımı ekledikten sonra, aynı şeyi önerdiğimi fark ettim. Bunu yapmanın 'standart' bir yolu olmadığını düşünüyorum. (Params kullanmanın dışında) –

+0

Gerekçenizin açıklanması için teşekkürler, çok takdir. :-) – Tomalak

2

Çoğu XSLT işlemcisinde, özel işlevleri uzantı olarak ekleyebilirsiniz. Örneğin burada Saxon's documentation var.

4

Geçerli klasör yolunu xslt dosyasından almanın bir yolu var mı?

diğer xml ve xslt dosyaları

uzatma fonksiyonları ve hatta parametreleri bunun için herhangi gerek yok bulmak gerekiyor!

bir <xsl:import> veya <xsl:include> talimat href özelliğinde kullanılan tüm göreceli URL'lerin çözülmesinin akım XSLT stil URL'ye dayanmaktadır - bu sadece vlearly olarak belirtilmiştir bir URL, sahip olması gerekir Yukarıdaki soruda doğrudur. Bu, XSLT stil sayfaları dahil/ithal etmek için çok uygundur.

document()fonksiyon aynı zamanda böylelikle anrelative URL'yi kullanarak herhangi bir ek XML belgesi erişilebilir hale benzer şekilde bir göreli URL çözecektir.

<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

İthalat, belge, belge ve göreli yollar hakkında kesinlikle haklısınız. Yalnızca geçerli dizini almak için uzantılar veya parametreler önerildi. –

4

Bu kurulum için işe yarayabilir:

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

Son olarak, burada bu tesisler kitlesel büyük kütüphanesine XSLT işlevleri ve şablonları (FXSL 2.x) nasıl kullanıldığınıan exampleolduğunu

Örneğin,

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