我有这个xslt文件,我需要调用放在同一个应用程序中其他地方的java函数。 在xslt文件中我有
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:java="java"
xmlns:test_my="vobs.plugins.WikiParser.WikiParser"
version="2.0">
<xsl:output indent="yes" method="html"/>
<xsl:template match="/">
<H1>
<xsl:value-of select="WikiDescription/Title"/>
</H1>
Summary: <xsl:value-of select="WikiDescription/Description"/>
<xsl:variable name="text">
<xsl:value-of select="WikiDescription/Text"/>
</xsl:variable>
<p>
<xsl:value-of select="test_my:parse2($text)"
disable-output-escaping="yes"/>
</p>
但是当我尝试执行此xlst文件时,我收到以下错误
XSL transform reported error:
XPath syntax error at char 21 on line -1 in {test_my:parse2($text)}:
Cannot find a matching 1-argument function named
{vobs.plugins.WikiParser.WikiParser}parse2()
似乎它无法找到java类,那么正确的方法是什么?一些代码示例会更好。提前谢谢!
答案 0 :(得分:3)
我遇到了完全相同的问题,这解决了我urn:java:
和java:
都失败的问题。
假设您正在使用Xalan进行转换,则应将xmlns:test_my="vobs.plugins.WikiParser.WikiParser"
更改为xmlns:test_my="xalan://vobs.plugins.WikiParser.WikiParser"
。
答案 1 :(得分:3)
这取决于您使用的XSLT转换处理器。撒克逊人使用urn:java:
; Xalan使用xalan://
。
答案 2 :(得分:2)
您需要将名称空间声明(在xsl:stylesheet元素中)从xmlns:test_my="vobs.plugins.WikiParser.WikiParser"
更改为xmlns:test_my="urn:java:vobs.plugins.WikiParser.WikiParser"
基本原理如下:为了使用包a.b中的类C,您需要定义名称空间前缀并将其与urn:java:a.b.C
相关联。
如果我正确理解XSL,则在导入不属于标准库的Java代码时需要urn:
前缀(如您的情况)。如果您只需要导入标准库类,那么“java:”就可以了。
(进一步详情:http://cafeconleche.org/books/xmljava/chapters/ch17s03.html)
[编辑:改变“java:” - &gt; “瓮:JAVA:”]