Ant 1.8을 사용하여 폴더의 문서에서 일부 XSLT를 실행하고 있습니다. Ant는 Xalan을 사용하여 XSLT를 처리합니다. 작업이 잘 돌아가고, 입력 된 것들과 일치하는 변환 된 출력 파일들을 얻는다.Ant 또는 Jython에서 XSLT 확장을 만들 수 없습니다.
일부 까다로운 문자열을 처리하기 위해 Javascript 또는 Jython 함수로 XSL을 확장하려고 할 때 문제가 발생합니다. Javascript 나 Jython 중 어느 쪽이 먼저 작동하든, 어느 쪽이든 먼저 할 수는 있지만 그 순간도 마찬가지입니다.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:jython-extension="http://www.jython.org/"
xmlns:lxslt="http://xml.apache.org/xslt"
xmlns:xalan="http://xml.apache.org/xalan"
exclude-result-prefixes="lxslt xalan"
xmlns:gotofritz="GotoFritz">
<xalan:component prefix="gotofritz" functions="test">
<xalan:script lang="javascript">
function test(){
return '********* JS WORKS *******';
}
</xalan:script>
</xalan:component>
<lxslt:component prefix="jython-extension" functions="test">
<lxslt:script lang="jpython">
def test():
return "**** JYTHON WORKS ****"
</lxslt:script>
</lxslt:component>
<xsl:template match="/">
<xsl:value-of select="gotofritz:test()"/>
<xsl:value-of select="jython-extension:test()"/>
</xsl:template>
</xsl:stylesheet>
난에는/usr/share/개미/lib에 bsf.jar 및 javascript.har뿐만 아니라 최신의 Xalan 항아리 다운로드, 그들을 이동 한 - 나는 OS X의 오전
javscript가 "오류! 클래스 'GotoFritz'을 (를) 찾을 수 없습니다." 및 "오류! 외부 메서드 'GotoFritz.test'(공개해야 함)를 찾을 수 없습니다."
자이 썬이 으로 실패합니다. 경고! 'http://www.jython.org/ : 테스트'기능 호출을 해결할 수 없습니다.
java.lang.VerifyError: (class: test, method: template$dot$3 signature: (Lcom/sun/org/apache/xalan/internal/xsltc/DOM;Lcom/sun/org/apache/xml/internal/dtm/DTMAxisIterator;Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;I)V) Expecting to find integer on stack
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.getTransletInstance(TemplatesImpl.java:353)
at com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.newTransformer(TemplatesImpl.java:382)
at org.apache.tools.ant.taskdefs.optional.TraXLiaison.createTransformer(TraXLiaison.java:319)
at org.apache.tools.ant.taskdefs.optional.TraXLiaison.transform(TraXLiaison.java:177)
at org.apache.tools.ant.taskdefs.XSLTProcess.process(XSLTProcess.java:852)
at org.apache.tools.ant.taskdefs.XSLTProcess.execute(XSLTProcess.java:388)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:390)
at org.apache.tools.ant.Target.performTasks(Target.java:411)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.Main.runBuild(Main.java:809)
at org.apache.tools.ant.Main.startAnt(Main.java:217)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
나는 Xalan이 BSF를 사용하는 대신 Java로 확장을 모두 처리한다고 생각합니다. 어떤 아이디어? 미리 감사드립니다.
괜찮아 보이는군요. 시험 해보고 고마워요. 고마워요! – gotofritz