xslt получить путь к текущей папке в файле - PullRequest
15 голосов
/ 13 февраля 2009

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

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

Приветствия

Ответы [ 7 ]

6 голосов
/ 13 февраля 2009

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

5 голосов
/ 13 февраля 2009

Есть ли способ получить текущий путь к папке из файла 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>
5 голосов
/ 13 февраля 2009

В MSXSL в Windows вы можете использовать расширение скрипта, например:

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

4 голосов
/ 22 декабря 2011

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

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

Например,

<xsl:value-of select="document(concat(system-property('user.dir'),'/',filename,'.xml'))//title[1]"/>
3 голосов
/ 13 февраля 2009

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

2 голосов
/ 13 февраля 2009

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

1 голос
/ 13 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...