快捷搜索:

通过XSLT访问Java代码

要是你盼望将XML数据转换为固定宽度和纯文本的字符串——这刚好是XSLT不太方便实现的一个特点,或者,大概你盼望在XML文件中履行词语调换。在这些环境下,当你的事务越过了XSLT自身的处置惩罚能力时,可以经由过程在你的XSLT处置惩罚器中调用Java函数来完成。

我看到过使用类似VBScript和Jscript的脚本说话完成特殊处置惩罚的例子(针对微软解析器的),然则若何使用Java来履行特殊的处置惩罚还不是分外埠显着。只管如斯,简单地说,可以在XSLT处置惩罚器中经由过程XML命名空间(namespaces)调用Java函数来实现。Java与XSLT的结合为构建壮实的利用法度榜样供给了强有力的措施。

应用定制的命名空间

命名空间是经由过程应用统一资本标识符(URI)来修饰限制XSL中元素和属性名称的一种措施。例如,常见的XSL元素必要有xsl命名空间前缀来修饰,xsl经由过程应用XSLT命名空间URI来声明:

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

然则并不局限于应用XSLT命名空间,你完全可以自由地声明你自己定制的命名空间,并用它们来识别定制的XSLT标签和范围。

你必须应用定制的命名空间前缀来完成对外部函数的调用,例如,mynspace:fundtion(),该命名空间前缀mynspace,必须与一个命名空间URI相关联,例如:

xmlns:myspace="d:///XMLprogs/mynamespace"

一样平常的Java绑定应用命名空间URI标识Java类函数的位置。对用于本文示例代码的Xalan XSLT处置惩罚器(版本1.2.2)来说,命名空间URI必须具有URI-stem/packagename的形式。假如你应用了XT,那么你的命名空间应该有如下款式:

xmlns:mynspace="d://XMLprogs/mynamespace.myclassname

这种环境下,你可以应用XSLT代码调用来自myclassname的Java函数。

绑定外部Java函数

此处给出在XSLT模板内部绑定Java说话编写的外部函数的历程。

将你自己定制的命名空间作为它们的属性添加到样式表(stylesheet)元素或者你的模板中。

确保你的Java类文件所在目录位于你的XSLT处置惩罚器所运行的Java虚拟机(JVM)的CLASSPATH中。

对付静态措施,可以使可以用完全合格的类名称加上措施和任何必需的的参数,当然还有命名空间前缀。

对付非静态措施,起开创建类实例,然后调用该措施并供给任何必需的参数。

例如,下面的样式表元素包孕一个定制的命名空间声明:

在声清楚明了这个命名空间后,可以造访该类的任何静态措施,像这样:

假如措施不是静态的,那么必须首先调用类构造器,例如:

Java包"mynamespace"必须位于"d://XMLprogs"目录中。

留意:应用可选属性xsl:exclude-result-prefixes,预防了java命名空间被包括到结果文档中。

上面的XSLT代码中,行调用位于mynamespace包中名为DateClass的类的静态措施displayDate()。

使用这种技巧,你可以调用任何Java类措施——包括那些必要参数的措施——参数来自于你的XSLT模板。

本文涉及的代码:date.xsl

DateClass.java

packagemynamespace;

importjava.util.Date;

public class DateClass{

public static String displayDate(){

Date d = new Date();

returnd.toString();

}

}

要运行这些代码,必要:

创建文件夹"d:\XMLProgs\mynamespace"。

将DateClass.java文件放入上述路径并编译获得DateClass.class文件。

将"d:\XMLProgs\mynamespace"放入classpath变量中。

使用XSLT处置惩罚器,例如XT或XALAN将该XSL文件和详细的XML文件关联。

您可能还会对下面的文章感兴趣: