尝试在 xslt 中调用 javascript 函数时出错 (Java JDK 8)
Error when try to call javascript function in xslt (Java JDK 8)
我正在尝试调用我的 XSL 文件中的 javascript 函数。
我的 XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:jscript="http://www.url.com" exclude-result-prefixes="msxsl jscript">
.
.
.
<html>
<head>
.
.
.
<msxsl:script language="JScript" implements-prefix="jscript">
<![CDATA[
function testFnc(){
return "test";
}
}]]>
</msxsl:script>
</head>
.
.
.
</html>
.
.
.
<xsl:value-of select="jscript:testFnc()"/>
在 Java 文件中,当我尝试创建 Transformer 时:
Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(xslUrl));
我收到错误:
ERROR: 'Cannot find class 'www.url.com'.'>
FATAL ERROR: 'Cannot find external method 'www.url.com.testFnc' (must
be public).'
javax.xml.transform.TransformerConfigurationException: Cannot find
external method 'www.url.com.testFnc' (must be public).
没有这个代码
<xsl:value-of select="jscript:testFnc()"/>
一切正常。
在 Java 7 中,内置 Xalan 存在类似问题:
Xalan Java extensions 'Cannot find class' error on JRE 7
我想知道这个问题是否仍然存在于 Java 8.
我也尝试过这样的事情:
http://xml.apache.org/xalan-j/extensions.html#basic-pattern
How to include a call to JavaScript within XSLT?
但结果是一样的。
提前致谢
感谢 Martin Honnen 的帮助,我能够在 xslt 代码中使用我自己的 Java class。您可以在文档中找到更多信息:http://xml.apache.org/xalan-j/extensions_xsltc.html#java_ext
xslt:
<xmlns:java_util="http://xml.apache.org/xalan/java/com.example.java.util" exclude-result-prefixes="java_util">
<!-- Java function call -->
<xsl:value-of select="java_util:DateUtil.formatDateTime(.)"/>
Java class:
package com.example.java.util;
public class DateUtil {
public static String formatDateTime(String date){
//implementation
}
}
我正在尝试调用我的 XSL 文件中的 javascript 函数。
我的 XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:jscript="http://www.url.com" exclude-result-prefixes="msxsl jscript">
.
.
.
<html>
<head>
.
.
.
<msxsl:script language="JScript" implements-prefix="jscript">
<![CDATA[
function testFnc(){
return "test";
}
}]]>
</msxsl:script>
</head>
.
.
.
</html>
.
.
.
<xsl:value-of select="jscript:testFnc()"/>
在 Java 文件中,当我尝试创建 Transformer 时:
Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(xslUrl));
我收到错误:
ERROR: 'Cannot find class 'www.url.com'.'>
FATAL ERROR: 'Cannot find external method 'www.url.com.testFnc' (must be public).'
javax.xml.transform.TransformerConfigurationException: Cannot find external method 'www.url.com.testFnc' (must be public).
没有这个代码
<xsl:value-of select="jscript:testFnc()"/>
一切正常。
在 Java 7 中,内置 Xalan 存在类似问题: Xalan Java extensions 'Cannot find class' error on JRE 7
我想知道这个问题是否仍然存在于 Java 8.
我也尝试过这样的事情: http://xml.apache.org/xalan-j/extensions.html#basic-pattern How to include a call to JavaScript within XSLT?
但结果是一样的。
提前致谢
感谢 Martin Honnen 的帮助,我能够在 xslt 代码中使用我自己的 Java class。您可以在文档中找到更多信息:http://xml.apache.org/xalan-j/extensions_xsltc.html#java_ext
xslt:
<xmlns:java_util="http://xml.apache.org/xalan/java/com.example.java.util" exclude-result-prefixes="java_util">
<!-- Java function call -->
<xsl:value-of select="java_util:DateUtil.formatDateTime(.)"/>
Java class:
package com.example.java.util;
public class DateUtil {
public static String formatDateTime(String date){
//implementation
}
}