2009-02-13 38 views
12

¿Hay alguna forma de obtener la ruta actual de la carpeta dentro de un archivo xslt?xslt obtener la ruta actual de la carpeta del archivo

Necesito localizar otros archivos xml y xslt. Tenemos diferentes carpetas de clientes y necesitaremos encontrar con éxito los archivos correctos.

Saludos

Respuesta

6

Puede enviarlo a la hoja de estilo desde el exterior usando xsl:param. Entonces necesita determinar cuál es la ruta actual al invocar desde el exterior;)

3

no ...
pero tal vez podría solucionar el problema mediante el uso de URLs relativas y/o el paso de parámetros en la hoja de estilo.

1

No AFAIK (aunque siempre podría pasarlo como un param a la transformación), pero no estoy seguro de por qué las rutas relativas ganaron ' Te trabajo aquí.

4

En msxsl en Windows, puede utilizar una extensión de script como el siguiente:

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

Otros procesadores soportan XSL métodos similares para utilizar los recursos externos (lenguajes de script, bibliotecas de funciones, etc.), así que esto es sólo una ejemplo.

+0

No estoy seguro de por qué esto no fue votado. En realidad funciona – Tomalak

+2

Perdón por eso. Lo rechacé por usar una extensión no estándar, pero después de agregar mi respuesta, me di cuenta de que sugerí lo mismo. Creo que no hay una forma "estándar" de hacerlo. (Excepto el uso de params) –

+0

Gracias por explicar su razonamiento, muy apreciado. :-) – Tomalak

2

En la mayoría de los procesadores XSLT, puede agregar funciones personalizadas como extensiones. Por ejemplo, aquí está Saxon's documentation cómo hacerlo.

4

¿Hay alguna forma de obtener la ruta actual de la carpeta dentro de un archivo xslt?

necesitamos para localizar otras XML y XSLT archivos

No hay necesidad de funciones de extensión o incluso parámetros de hacer eso!

Cualquier relativos URL utilizadas en el atributo href de una instrucción o <xsl:import><xsl:include> se resuelven basa en la URL de la hoja de estilo XSLT actual - sólo tiene que tener una dirección URL que aparece como vlearly cierto en la pregunta anterior. Esto es muy conveniente para importar/incluir hojas de estilo XSLT.

La funcióndocument()también resolver una dirección URL relativa de una manera similar, con lo que cualquier documento XML adicional accesible a través de URL anrelative.

Por último, aquí esan examplecómo estas instalaciones se utilizan masivamente en una gran biblioteca de funciones XSLT y plantillas (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

Tiene toda la razón sobre importaciones, incluye documentos y rutas relativas. Se sugirieron extensiones o parámetros para obtener solo el directorio actual. –

4

Esto puede funcionar para su configuración:

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

Por ejemplo,

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