Как использовать функцию JavaScript в xslt2.0? - PullRequest
0 голосов
/ 26 сентября 2018

Я создал файл "name.js" и у меня есть "name.xslt". Я хочу вызвать функцию getName из "name.js" в "name.xslt".Для этого мне нужно импортировать «name.js», а затем вызвать функцию из этого файла.

Пожалуйста, помогите мне, как импортировать «name.js» в XSLT и как вызвать функцию из файла js

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Если вы не используете процессор XSLT 2.0, поддерживающий использование Javascript для реализации функций расширения, это невозможно.В комментарии, в котором вы упоминаете, что используете Saxon, Saxon не поддерживает это, поскольку в первую очередь он позволяет вам реализовывать свои собственные функции с использованием чистого XSLT и XPath, используя xsl:function https://www.w3.org/TR/xslt-30/#stylesheet-functions и выше, что позволяет писать функции расширения.в Java (для его версии Java) или в C # или VB.NET для его версии .NET, см. http://saxonica.com/html/documentation/extensibility/ для получения подробной информации.

Некоторые другие XSLT, такие как Altova или Xml Prime, могут оказать вам некоторую поддержку в использовании Javascript или JScript для реализации функций расширения, но в целом это ограничено основными механизмами этих языков, поэтому в зависимости от того, какой файл скрипта делает этоможет вообще не помочь, если предположить, что файл скрипта пытается использовать специфичные для API браузера объекты и функции, такие как, например, окно, документ.

0 голосов
/ 27 сентября 2018

Если вы используете Saxon-процессор на основе Java и действительно важно вызывать этот код JS, тогда вы можете написать функцию расширения Java, которая вызывает код JS с помощью Nashorn, и вызвать функцию расширения Java из Saxon.Однако, если код JS действительно не является чем-то особенным, переписывание его логики в XSLT или в Java, вероятно, потребует меньших усилий.

0 голосов
/ 26 сентября 2018

Вам понадобятся два xslt-файла, первый из которых будет содержать код javascript, а второй будет импортировать его, например: первое имя файла first.xslt (здесь - javascript):

<msxsl:script language="JScript" implements-prefix="user">
    function getName(nodelist) {
      return "David";
    }
</msxsl:script>

Второй файл будет основным.xslt (здесь вы импортируете first.xslt):

 <xsl:import href="first.xsl"/>

 <xsl:template match="/">
   <xsl:value-of select="user:getName(.)"/>
 </xsl:template>
...