Xslt получить текущий путь к папке

Есть ли способ получить текущий путь к папке из файла xslt?

Вам нужно найти другие файлы xml и xslt. У нас есть разные папки для клиентов и вам нужно будет найти правильные файлы.

Приветствия

Ответы

Ответ 1

Вы можете отправить его в таблицу стилей извне, используя xsl: param. Затем вам нужно определить, что текущий путь при вызове извне;)

Ответ 2

В MSXSL в Windows вы можете использовать расширение script следующим образом:

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

Другие XSL-процессоры поддерживают аналогичные методы использования внешних ресурсов (языки сценариев, библиотеки функций и т.д.), поэтому это всего лишь пример.

Ответ 3

Есть ли способ получить текущий путь папки из файла xslt?

Вам нужно найти другие xml и xslt Файлы

Не нужно никаких функций расширения или даже параметров для этого!

Любые относительные URL-адреса, используемые в атрибуте href <xsl:import>" → <xsl:include>  инструкции разрешаются на основе URL-адреса текущей таблицы стилей XSLT - для этого требуется только URL-адрес, который в указанном выше вопросе явно указан как истинный. Это очень удобно при импорте/в том числе таблиц стилей XSLT.

Функция document() также разрешит относительную URL аналогичным образом, что делает доступным любой дополнительный XML-документ с использованием относительного URL-адреса.

Наконец, здесь пример , как это средство массово используется в большой библиотеке функций и шаблонов XSLT ( 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>

Ответ 4

Это может работать для вашей установки:

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

Например,

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

Ответ 5

нет...
но вы могли бы решить эту проблему, используя относительные URL-адреса и/или параметры передачи в таблицу стилей.

Ответ 6

В большинстве процессоров XSLT вы можете добавлять пользовательские функции в качестве расширений. Например, здесь саксонская документация, как это сделать.

Ответ 7

Не AFAIK (хотя вы всегда можете передать его как параметр для преобразования), но я не понимаю, почему для вас здесь не работают относительные пути.