2017-01-18 4 views
0

Я пытаюсь запустить скрипт тянуть комбинацию из последних 2 0 от поля XML и заменить их случайное число в диапазоне от 10 до 60.XPST0017 Xpath ошибка синтаксиса

однако следующая ошибка появилась

XPST0017: XPath ошибка синтаксиса в полукокса 15 по линии 31 в {randomnr: RAND()}:

не удается найти соответствующий функцию 0-аргумент с именем {URI: nonexistant} рандов()

какой час Я делаю неправильно? Я знаю, что все, кроме работы javascript, работает

 <xsl:stylesheet version="2.0" xmlns:randomnr="uri:nonexistant" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:package="info:srw/extension/13/package-v1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:saxon="uri:http://saxon.sf.net/"> 
     <xsl:output omit-xml-declaration="yes" indent="yes" /> 
      <saxon:script language="JavaScript" implements-prefix="randomnr"> 
      <![CDATA[ 
      function rand() 
      { 
       return"" + Math.floor((Math.random() * 60) + 10); 
      } 
      ]]> 
     </saxon:script> 
     <xsl:variable name="basename"> 
     <xsl:call-template name="substring-before-last"> 
     <xsl:with-param name="string1" select="$filename" /> 
     <xsl:with-param name="string2" select="'00'" /> 
    </xsl:call-template> 
    </xsl:variable> 
    <xsl:value-of select="$basename" /> 
    <xsl:value-of select="randomnr:rand()"/> 
+0

Мне неизвестен элемент 'saxon: script', а пространство имен Saxon extension по-разному отличается от используемого вами. Я не думаю, что у Saxon 9 есть поддержка для звонка в Javascript вообще. Если вам нужен случайный номер, вы можете позвонить в Java, если он поддерживается, или использовать функцию XPath 3.1 для этого, если она поддерживается. –

+1

См. Http://saxonica.com/html/documentation/extensions/instructions/ для определенных элементов расширения, нет элемента 'saxon: script'. –

+0

, по-видимому, я смотрел более старую версию документации по саксону , в которой были элементы верхнего уровня саксон: скрипт. – thomas

ответ

0

Есть некоторые ограничения, касающиеся Саксона.

Посмотрите на http://saxon.sourceforge.net/saxon7.9/extensions.html#saxon:script

Он гласит: атрибут языка является обязательным, и должен принимать значение «Java». В противном случае Saxon игнорирует элемент saxon:script.

я могу предложить другое решение, основанное на вызов методов Java:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:math="java.lang.Math"> 
    <xsl:output method="text"/> 

    <xsl:template match="/"> 
    <xsl:value-of select="math:floor((math:random() * 60) + 10)"/> 
    </xsl:template> 

</xsl:stylesheet> 

Я попробовал его на http://xsltransform.net/ и обнаружил, что она работает в Xalan и саксонских 6.5.5 режимов. К сожалению, в Saxon HE и Saxon EE режимы не срабатывают.

Отметьте, что math namespace указывает на полное имя класса Java.

0

Что вы делаете неправильно? Вы консультируетесь с какой-то очень древней документацией (и, возможно, экстраполируя то, что она на самом деле говорит). Возможно, было время, когда существовал сценарий saxon:, но (а) он был очень давным-давно, и (б) он никогда не поддерживал вызов Javascript.

Смежные вопросы