我正在使用fop将xml转换为pdf,所以为此我编写了一个xslt代码。 在相同的xslt中,我使用了java代码,但不知怎的,我得到一个错误,声明nosuchmethodexception:找不到方法org.apache.xml.utils.NodeVector.input([ExpressionContext,])。
但我的java代码是用户定义的代码,它位于不同的包中。
我的xml具有local_curr属性。
我的java类名是XMLData。 包是com.pdf Java Method是输入,它接受String值并返回String
xslt代码:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:java="com.pdf.XMLData">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<!-- Defining Page Layout -->
<fo:layout-master-set>
<fo:simple-page-master master-name="A3-portrait"
page-height="29.7cm" page-width="40.0cm" margin="2cm">
<fo:region-body margin-bottom="20mm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A3-portrait">
<fo:flow flow-name="xsl-region-body">
<fo:table table-layout="fixed" width="100%" border-width="1mm"
border-collapse="separate">
<fo:table-row>
<fo:table-cell background-color="#F79F81"
border-width="0.1mm" border-style="solid">
<fo:block wrap-option="wrap" font-size="15pt"
padding="5pt" text-align="right">
<xsl:value-of select="java:input(@local_curr)" />
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
问题是@local_curr
可能不会返回java方法所期望的类型。
您需要将其解析为例如字符串
<xsl:value-of select="java:input(string(@local_curr))" />
或作为数字
<xsl:value-of select="java:input(number(@local_curr))" />
抛出NoSuchMethodException
因为没有找到给定类型作为参数的方法。
答案 1 :(得分:0)
感谢您的帮助。 它已经解决了。实际上我必须在fop的批处理文件中添加我的jar文件,这解决了我的问题。
...谢谢