java解析xml/xsl报:java.lang.NoSuchMethodException

ycufo 2009-08-11 02:38:06
xsl里添了了一个script,代码如下:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:DateFuncs="dfuncs">
<xsl:output omit-xml-declaration="yes" encoding="UTF-8" method="html"/>
<!-- External scripts -->
<msxsl:script language="VBScript" implements-prefix="DateFuncs">
<![CDATA[
' Input : from_date (yyyymmdd), to_date (yyyymmdd)
' Returns: number of days between from_date and to_date (to_date not included)
Function DaysBetween(from_date, to_date)
Dim d1, d2

if len(from_dt) <> 8 or len(to_dt) <> 8 _
then
DaysBetween = -1
end if

' Translate to format yyyy-mm-dd
d1 = left(from_date,4) & "-" & mid(from_date,5,2) & "-" & right(from_date,2)
d2 = left(to_date,4) & "-" & mid(to_date,5,2) & "-" & right(to_date,2)

if not isdate(d1) or not isdate(d2) _
then
DaysBetween = -1
else
DaysBetween = DateDiff("d", CDate(d1), CDate(d2))
end if
End Function
]]>
</msxsl:script>

。。。。。。
<xsl:template name="daysBetween">
<xsl:param name="v_from_date"/>
<xsl:param name="v_to_date"/>
<xsl:value-of select="DateFuncs:DaysBetween(substring($v_from_date,1),substring($v_to_date,1))"/>
</xsl:template>

<!-- 调用 -->
<xsl:call-template name="daysBetween">
<xsl:with-param name="v_from_date" select="./xmlsum/usg[@type='XPLN']/d7/d7[@type='GSM']/fromdt"/>
<xsl:with-param name="v_to_date" select="./xmlsum/usg[@type='XPLN']/d7/d7[@type='GSM']/todt"/>
</xsl:call-template>

在java中解析的代码
InputStream xmlStream = new ByteArrayInputStream(invoiceContent.getBytes("UTF-8"));
InputStream xsltStream = new ByteArrayInputStream(
OVRefreshCache.getURLContent(basePath + xslFile).getBytes("UTF-8"));

Source xsltSource = new StreamSource(xsltStream);

TransformerFactory factory = TransformerFactory.newInstance();
Transformer trans = factory.newTransformer(xsltSource);
result = new StreamResult(new ByteArrayOutputStream());
trans.transform(new StreamSource(xmlStream), result);

执行最后一句的时候报错:
(错误位置未知)java.lang.NoSuchMethodException: For extension function, could not find method java.lang.String.DaysBetween([ExpressionContext,] #STRING).


请帮忙看一下,谢谢!
...全文
191 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycufo 2009-08-12
  • 打赏
  • 举报
回复
先谢了。这个XML是从其他业务系统获取的,需要在服务器端解析显示页面,继续在线等。
  • 打赏
  • 举报
回复
还是直接在js里使用Msxml2.FreeThreadedDOMDocument解析吧
ycufo 2009-08-11
  • 打赏
  • 举报
回复
查了一天,在网上查到.net里的解决办法:
XslCompiledTransform xslt = new XslCompiledTransform();
string xslPath = Server.MapPath("productlist.xsl");
XsltSettings axslset = new XsltSettings();
axslset.EnableScript = true;
xslt.Load(xslPath, axslset,new XmlUrlResolver());

Java的没有找到解决的办法
ycufo 2009-08-11
  • 打赏
  • 举报
回复
同样的xsl文件,在js里使用Msxml2.FreeThreadedDOMDocument解析是没有问题的,用java解析就有问题。
ycufo 2009-08-11
  • 打赏
  • 举报
回复
是,就是想知道为什么xsl里有DaysBetween方法,解析的时候却找不到?
sebatinsky 2009-08-11
  • 打赏
  • 举报
回复
没有方法,我想你执行到最后一句出现了错误吧,最后那句也要调用方法啊,你就跳转到那个方法看看,(应该是没有这个方法,)所以还是没有方法的问题.

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧