欢迎光临
我们一直在努力

通过XSLT访问Java代码[转]-JSP教程,Java与XML

建站超值云服务器,限时71元/月

假如你希望将xml数据转换为固定宽度和纯文本的字符串——这刚好是xslt不太方便实现的一个特性,或者,也许你希望在xml文件中执行词语替换。在这些情况下,当你的事务超出了xslt自身的处理能力时,可以通过在你的xslt处理器中调用java函数来完成。

我看到过利用类似vbscript和jscript的脚本语言完成特殊处理的例子(针对微软解析器的),但是如何利用java来执行特殊的处理还不是特别地明显。尽管如此,简单地说,可以在xslt处理器中通过xml命名空间(namespaces)调用java函数来实现。java与xslt的结合为构建健壮的应用程序提供了强有力的方法。

使用定制的命名空间\r

命名空间是通过使用统一资源标识符(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中。

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

对于非静态方法,首先创建类实例,然后调用该方法并提供任何必需的参数。

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

<?xml version=”1.0” encoding=”utf-8”?><xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/xsl/transform” xmlns:myspace=”d://xmlprogs/mynamespace”>

在声明了这个命名空间后,可以访问该类的任何静态方法,像这样:

<xsl:variable name=”funvalue”select=”mynspace:classname.function()”/>

如果方法不是静态的,那么必须首先调用类构造器,例如:

<xsl:variable name="funvalue" select="mynspace.classname.new()"/><?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:java="d://xmlprogs/mynamespace" exclude-result-prefixes="java">

java包\"mynamespace"必须位于"d://xmlprogs"目录中。

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

<xsl:template match="/"><html><body><p><xsl:value-of select="java:dateclass.displaydate()"/></p></body></html></xsl:template>

上面的xslt代码中,<xsl:value-of select="java:dateclass.displaydate()"/>行调用位于mynamespace包中名为dateclass的类的静态方法displaydate()。

利用这种技术,你可以调用任何java类方法——包括那些需要参数的方法——参数来自于你的xslt模板。

本文涉及的代码:date.xsl

<?xml version="1.0" encoding="utf-8" ?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/xsl/transform"xmlns:java="d://xmlprogs/mynamespace" exclude-result-prefixes="java"><xsl:template match="/"><html><body><p><xsl:value-ofselect="java:dateclass.displaydate()" /></p></body></html></xsl:template></xsl:stylesheet>dateclass.javapackagemynamespace;importjava.util.date;public class dateclass{public static string displaydate(){date d = new date();returnd.tostring();}}

要运行这些代码,需要:

创建文件夹"d:xmlprogsmynamespace"。

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

将"d:xmlprogsmynamespace"放入classpath变量中。

利用xslt处理器,例如xt或xalan将该xsl文件和具体的xml文件关联。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 通过XSLT访问Java代码[转]-JSP教程,Java与XML
分享到: 更多 (0)