Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BaseX:Javascript函数在XSLT中不起作用_Javascript_Xslt_Jaxp_Basex - Fatal编程技术网

BaseX:Javascript函数在XSLT中不起作用

BaseX:Javascript函数在XSLT中不起作用,javascript,xslt,jaxp,basex,Javascript,Xslt,Jaxp,Basex,我使用Altova创建了一个XSLT,现在我想将它与Basex一起使用,并从java调用转换。在Altova中我没有任何问题,但在Basex下我有“[FODC0002]无法编译样式表”。XSLT的一部分是: <xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msxsl="urn:s

我使用Altova创建了一个XSLT,现在我想将它与Basex一起使用,并从java调用转换。在Altova中我没有任何问题,但在Basex下我有“[FODC0002]无法编译样式表”。XSLT的一部分是:

  <xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:js="urn:custom-javascript" exclude-result-prefixes="msxsl js" xmlns:math="http://exslt.org/math" extension-element-prefixes="math">
    <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
       <xsl:template match="Linee">
     <root_bordero>
     <xsl:element name="bordero">
            <xsl:apply-templates select="Linea"/>
     </xsl:element>
     </root_bordero>
       </xsl:template>
    <xsl:template match="Linea">
    <xsl:variable name="num_corse_mattina" select="count(./Fasce[./@nome='mattina']/orari_partenza/*)"/>
    <xsl:variable name="num_bus" as="xs:integer" select="count(document('/path_to/Autobus.xml')/Autobus/Autobus[./@Linea=current()/@id_linea and ./@Fascia='mattina']/@Targa)"/> 
     .....
    <xsl:variable name="array_bus_mat" as="xs:string*" select="tokenize(js:random(number($num_bus),number($num_corse_mattina)),'\s')"/>
    ......
     </xsl:template>
     <msxsl:script language="JavaScript" implements-prefix="js">
           <![CDATA[  
             function random(range,lenght) {

        var array = new Array(lenght);
        var array_key = new Array(lenght);
        var min = 1;
                for (var i = 0; i < lenght; i++) {
            array[i]=i+1;
                }
               array_key[0] = Math.floor(Math.random() * (range - min +1))+min;

                for (var i=1; i<lenght; i++) {
                    var key = Math.floor(Math.random() * (range - min +1))+min;

                while(array_key[i-1]==key){
           key = Math.floor(Math.random() * (range - min +1))+min;
                     }
                     array_key[i]=key;
                 }

         var string='';
         for (var i=0; i<lenght-1; i++) {
        string=''+string+array_key[i] + ' '; 
             }
        string=string+array_key[i];

            return string;
                }
            ]]> 
          </msxsl:script>
       </xsl:stylesheet>  

.....
......

在Java下,我尝试使用JAXP和Basex JQX进行XSLT转换,但编译错误是“非静态Java函数‘random’的第一个参数不是有效的对象引用。”


请帮帮我

msxsl:script是该语言的专有Microsoft扩展,您不能期望它在非Microsoft处理器上工作。

msxsl:script是该语言的专有Microsoft扩展,您不能期望它在非Microsoft处理器上工作。

好的,谢谢!但是我可以用什么来代替呢?可以使用javascript函数吗?我找到的所有示例都使用msxsl:script。如果不是,我如何集成外部java方法呢?每个XSLT和XQuery处理器都有一些调用外部代码的机制,但它因产品而异。您需要检查BaseX文档。好的,谢谢!但是我可以用什么来代替呢?可以使用javascript函数吗?我找到的所有示例都使用msxsl:script。如果不是,我如何集成外部java方法呢?每个XSLT和XQuery处理器都有一些调用外部代码的机制,但它因产品而异。您需要检查BaseX文档。