2012-12-04 7 views
0

저는 Altova를 사용하여 XSLT를 만듭니다. 이제 Basex에서 사용하고 java에서 변환을 호출하고 싶습니다. Altova에서 아무런 문제가 없지만 Basex에서 "[FODC0002] 스타일 시트를 컴파일 할 수 없습니다".BaseX : 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> 
자바에서

, 나는 JAXP와 Basex JQX 모두를 사용하여 XSLT 변환을 시도했지만 컴파일 오류가 "하지 정적 자바 기능 '임의'의 첫 번째 인수 인 다음 XSLT의 일부입니다 유효한 개체 참조가 아닙니다. "

제발, 도와주세요!

답변

0

msxsl : script는 Microsoft의 독점적 인 언어 확장 기능이며 타사 프로세서에서 작동하지 않을 수 있습니다.

+0

감사합니다. 하지만 대신 무엇을 사용할 수 있습니까? 자바 스크립트 함수를 사용할 수 있습니까? 내가 찾은 모든 예제는 msxsl : script를 사용합니다. 그렇지 않은 경우 어떻게 외부 Java 메소드를 통합 할 수 있습니까? – alhandra

+0

모든 XSLT 및 XQuery 프로세서에는 외부 코드를 호출하는 일부 메커니즘이 있지만 제품마다 다릅니다. BaseX 문서를 확인해야합니다. –

관련 문제