2012-01-27 4 views
0

Altova XML Spy에서 실행될 때 xslt 변형이 있지만 saxon9he.jar에서는 오류가 발생합니다. 코드 단편과 saxon 오류 메시지는 아래를 참조하십시오.saxon에서 실행할 xsl의 인라인 자바 스크립트를 지정하는 방법

saxon을 xslt 프로세서로 사용하려면이 작업을 다르게 수행해야합니까?

<xsl:stylesheet 
    version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:fn="http://www.w3.org/2005/xpath-functions" 
    xmlns:custom="urn:schemas-microsoft-com:xslt" 
    xmlns:js="urn:custom-javascript" 
    exclude-result-prefixes="custom js"> 

    <custom:script language="Javascript" implements-prefix="js"> 
     <![CDATA[ 
     function mergeStrings (string1, string2) { 
      ... java code ... 
     } 
    ]]> 
    </custom:script> 

사용자 정의 스크립트는 같은 XPath 표현식에서 호출되는 다음

<xsl:value-of select="js:mergeStrings(str1, str2)" disable-output-escaping="yes"/> 

내가 사용하는 색슨 호출은 다음과 같다 : 비슷한 메시지와 함께

java -jar C:\saxon9he.jar -s:C:\src.xml -xsl:C:\transform.xslt -o:C:\out.html 

로 색슨 족이 지금 오류 다음에 :

Error at xsl:value-of on line 775 column 105 of transform.xslt: 
    XPST0017: XPath syntax error at char 43 on line 775 in {...gs(str1, str2...}: 
    Cannot find a matching 2-argument function named {urn:custom-javascript}mergeStrings() 

답변

2

내가 아는 한 Saxon은 자바 스크립트에서 확장 기능을 작성하는 것을 지원하지 않습니다. XSLT 2.0 xsl:function을 사용하여 순수 XSLT 및 XPath 2.0으로 함수를 작성할 수 있으며 Java 버전의 Saxon 및 Java 용 확장 함수 (http://www.saxonica.com/documentation/extensibility/intro.xml)를 작성할 수 있습니다. .NET 버전의 Saxon. 하지만 Javascript는 지원되지 않습니다.

+0

명확한 대답 - saxonica 문서 페이지에 언급 된 "통합 확장 기능"기능을 사용하는 saxon 내에서 모든 작업을 수행하려면 여기에 더 많은 노력을 기울여야합니다 ... – Maestro13

+1

솔직히 XSLT 및 XPath 2.0과 ECMAScript/Javascript의 기능 비교 왜 확장 기능에 의존하지 않고'mergeStrings'을'xsl : function'으로 구현할 수 없는지 궁금합니다. 그러나 우리는 기능 코드의 세부 사항을 보거나 명확한 요구 사항 설명을 볼 필요가 있습니다. 모든 사항은 별도의 게시물에서 수행됩니다. –