我正在使用APACHE FOP将我的xml文件转换为PDF。我有一个XSL文件,我需要调用一个java函数来转换从XML读取的一些值。
我已经在命名空间中声明了包含该函数的java类,并且正在调用静态java函数,如下所示:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:java="http://xml.apache.org/xslt/java" exclude-result- prefixes="java"
xmlns:dateConversion = "urn:java:com.geonexus.worx.sync.reports.ReportMaker">
<fo:block background-color="yellow" padding="1pt">
<fo:inline padding-left="2pt" display-align="center">
<xsl:value-of select="dateConversion.convertDate(@dateDetected)"/>
</fo:inline>
</fo:block>
但是我一直收到以下错误:
[ERROR] STDERR - ERROR: 'Could not compile stylesheet'
[ERROR] STDERR - FATAL ERROR: 'Could not compile stylesheet'
:Error checking type of the expression 'funcall(dateConversion.convertDate, [step("attribute", 51)])'.
[ERROR] STDERR - javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet
[ERROR] STDERR - at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(Unknown Source)
[ERROR] STDERR - at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(Unknown Source)
答案 0 :(得分:-1)
如果您使用的是XALAN,请尝试以下。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:dateConversion="xalan://com.geonexus.worx.sync.reports.ReportMaker"
extension-element-prefixes="dateConversion"
exclude-result-prefixes="dateConversion">
<fo:block background-color="yellow" padding="1pt">
<fo:inline padding-left="2pt" display-align="center">
<xsl:value-of select="dateConversion:convertDate(@dateDetected)"/>
</fo:inline>
</fo:block>
使用简单的XSL和Java类进行更新。
<强> XSL 强>:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dateConversion="xalan://com.geonexus.worx.sync.reports.ReportMaker"
extension-element-prefixes="dateConversion" exclude-result-prefixes="dateConversion">
<xsl:output method="xml" />
<xsl:template match="/">
<abcd>
<xsl:value-of select="dateConversion:convertDate('2005-03-02')" />
</abcd>
</xsl:template>
</xsl:stylesheet>
Java类:
package com.geonexus.worx.sync.reports;
public class ReportMaker {
public static String convertDate(String date) {
return date.replaceAll("-", ":");
}
}
<强>输出强>
<?xml version="1.0" encoding="UTF-8"?><abcd>2005:03:02</abcd>