Ответ 1
Вы можете отправить его в таблицу стилей извне, используя xsl: param. Затем вам нужно определить, что текущий путь при вызове извне;)
Есть ли способ получить текущий путь к папке из файла xslt?
Вам нужно найти другие файлы xml и xslt. У нас есть разные папки для клиентов и вам нужно будет найти правильные файлы.
Приветствия
Вы можете отправить его в таблицу стилей извне, используя xsl: param. Затем вам нужно определить, что текущий путь при вызове извне;)
В 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-процессоры поддерживают аналогичные методы использования внешних ресурсов (языки сценариев, библиотеки функций и т.д.), поэтому это всего лишь пример.
Есть ли способ получить текущий путь папки из файла 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>
Это может работать для вашей установки:
<xsl:value-of select="system-property('user.dir')"/>
Например,
<xsl:value-of select="document(concat(system-property('user.dir'),'/',filename,'.xml'))//title[1]"/>
нет...
но вы могли бы решить эту проблему, используя относительные URL-адреса и/или параметры передачи в таблицу стилей.
В большинстве процессоров XSLT вы можете добавлять пользовательские функции в качестве расширений. Например, здесь саксонская документация, как это сделать.
Не AFAIK (хотя вы всегда можете передать его как параметр для преобразования), но я не понимаю, почему для вас здесь не работают относительные пути.