我正在尝试使用java中的Saxon处理器。我在saxonee9-3-0-11j.zip中使用 saxon9ee.jar (刚刚下载,没有许可证 - 是否需要这样才能使用?)
他们的 * * 资源可在此处找到: http://www.saxonica.com/documentation/extensibility/functions/instance-methods.xml
http://www.saxonica.com/documentation/extensibility/functions/staticmethods.xml
我的xsl:
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<xsl:value-of select="dateUtils:getCurrentFullDate()"
xmlns:dateUtils="java:com.macfaq.math.SimpleSaxon"/>
</xsl:template>
</xsl:stylesheet>
我的java文件:
package com.macfaq.math;
public class SimpleSaxon {
public static final String YMDTHMS = "yyyyMMdd'T'hhmmss";
public static String getCurrentFullDate() {
return (new SimpleDateFormat(YMDTHMS).format(new Date()));
}
}
我的输入XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<date format="yyyyMMdd'T'hhmmss" year="2000" month="4" day="27"/>
我的主要java文件:
public class SaxonTransf {
public static void main(String[] args) {
System.setProperty("javax.xml.transform.TransformerFactory",
"net.sf.saxon.TransformerFactoryImpl");
String foo_xml = "in.xml"; // input xml
String foo_xsl = "transf.xsl"; // input xsl
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer transformer = tfactory.newTransformer(new StreamSource(
new File(foo_xsl)));
transformer.transform(new StreamSource(new File(foo_xml)),
new StreamResult(System.out));
}
错误: XTDE1425:找不到匹配的0参数函数 {的java:com.macfaq.math.SimpleSaxon} getCurrentFullDate()。名称空间URI和本地名称 被识别,但内置模板规则中的参数数量是错误的。
有没有人在使用这个出色的处理器时从XSL调用自定义java函数有什么好运?
答案 0 :(得分:2)
当你使用Saxon-EE JAR文件运行Saxon但没有许可证时,那么(至少在理论上)它的行为应该与Saxon-HE完全相同,这意味着不支持这种扩展函数调用。
如果您从命令行运行,-TJ选项将为您提供更详细的诊断,详细说明搜索匹配功能。