首页
|
操作系统
|
软件开发
|
网页制作
|
媒体动画
|
数据库
|
ASP教程
|
ASP.NET教程
|
PHP教程
|
JSP教程
|
XML教程
|
建站资料
|
软件学院
|
行业资讯
|
平面设计
|
网络安全
|
晒IT论坛
|
IT人才
位置:
晒IT
>>
XML教程
>>
XML与JSP
>> 正文
热门XML教程
XML Examples-from w3school...
xml-通过 XML 发布新闻
为何XMLHttpRequest对象是AJ...
简单的Ajax开发框架
利用XMLHTTP检测URL及探测服...
XML简明教程(六)
另一篇:用XMLHTTP Post/Get...
基于XML的下拉菜单(源代码)...
推荐XML教程
XML Examples-from w3school...
xml-通过 XML 发布新闻
为何XMLHttpRequest对象是AJ...
简单的Ajax开发框架
利用XMLHTTP检测URL及探测服...
XML简明教程(六)
另一篇:用XMLHTTP Post/Get...
基于XML的下拉菜单(源代码)...
通过XSLT访问Java代码[转]
通过XSLT访问Java代码[转]
作者:佚名 来源:不详 编辑:shaiit
假如你希望将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文件关联。
上一篇:
Oracle对XML格式数据的存取
下一篇:
应用JDOM处理数据库到XML转换的JSP实现
告诉好友
打印此文
关闭窗口
返回顶部
热点文章
XML Examples-from w3schools.com
xml-通过 XML 发布新闻
为何XMLHttpRequest对象是AJAX的核心...
简单的Ajax开发框架
利用XMLHTTP检测URL及探测服务器信息...
推荐文章
XML Examples-from w3schools.com
xml-通过 XML 发布新闻
为何XMLHttpRequest对象是AJAX的核心...
简单的Ajax开发框架
利用XMLHTTP检测URL及探测服务器信息...
相关文章
|
设为首页
|
加入收藏
|
联系我们
|
友情链接
|
诚聘英才
|
Copyright© 2008 ShaiIT.Com .All Rights Reserved
下载alexa工具,提升您的网站排名