IT技术江湖   操作系统   安全技术   平面设计   Web开发   数据库   互联网   搜索引擎   网络广告   
引擎技术江湖  BLOG  合作联系
本站
Google
IT技术江湖
首页>Web开发>xml XSLT> 通过XSLT访问Java代码
  • IT技术江湖
  • 通过XSLT访问Java代码
    http://www.hack1st.com 来源: 2008-03-20 阅读: 评论

      假如你希望将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中。

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

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

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

    <?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模板。

    上一页12 下一页

    上一篇:Saxon: 剖析XSLT处理器  
    下一篇:XSLT介绍

    ·网友互动--用户名: (新注册) 密码: 匿名评论 [所有评论]
    评论内容:(用户发表意见仅代表其个人意见,评论内容与本站立场无关,请自觉遵守互联网相关政策法规)
    关注此文读者还看过
    • ·让你的XSLT如虎添翼 -- 浅谈XSLT扩展
      ·利用XSLT 2.0成批处理XML
      ·用XSLT 2.0生成PHP
      ·XSLT介绍
      ·通过XSLT访问Java代码
      ·Saxon: 剖析XSLT处理器
      ·使用Java和XSLT生成动态Web页面
      ·XSLT处理程序是如何工作的
      ·用XSLT进行WSDL处理
      ·XSLT查找表中的默认值和错误处理
    最新更新
    • ·让你的XSLT如虎添翼 -- 浅谈XSLT扩展
      ·利用XSLT 2.0成批处理XML
      ·用XSLT 2.0生成PHP
      ·XSLT介绍
      ·通过XSLT访问Java代码
      ·Saxon: 剖析XSLT处理器
      ·使用Java和XSLT生成动态Web页面
      ·XSLT处理程序是如何工作的
      ·用XSLT进行WSDL处理
      ·XSLT查找表中的默认值和错误处理
    文章关注度排行
    ·XSLT处理程序是如何工作的
    ·使用Java和XSLT生成动态Web页面
    ·在XSLT中用递归实现循环
    ·让你的XSLT如虎添翼 -- 浅谈XSLT扩展
    ·用XSLT进行WSDL处理
    ·Saxon: 剖析XSLT处理器
    ·XSLT介绍
    ·用XSLT 2.0生成PHP
    热点推荐
    使用Java和XSLT生成动态Web页面
    使用Java和XSLT生成动态
    用XSLT进行WSDL处理
    用XSLT进行WSDL处理
    Saxon: 剖析XSLT处理器
    Saxon: 剖析XSLT处理器
    XSLT查找表中的默认值和错误处理
    XSLT查找表中的默认值和
    频道推荐
    • ·XSLT处理程序是如何工作的
    • ·使用Java和XSLT生成动态Web页面
    • ·用XSLT进行WSDL处理
    • ·Saxon: 剖析XSLT处理器
    • ·XSLT介绍
    • ·XML 和XSLT结合使你的网站设计浑然一体
    • ·通过XSLT访问Java代码
    • ·XSLT查找表中的默认值和错误处理
    本站精华
    XSLT查找表中的默认值和错误处理
    XSLT查找表中
    用XSLT进行WSDL处理
    用XSLT进行WS
    使用Java和XSLT生成动态Web页面
    使用Java和XS
    • ·XSLT介绍
    • ·通过XSLT访问Java代码
    • ·Saxon: 剖析XSLT处理器
    • ·使用Java和XSLT生成动态Web页
    • ·XSLT处理程序是如何工作的
    • ·用XSLT进行WSDL处理
    • | 网站导航 | 联系QQ | 编辑邮箱 | RSS订阅 | 友情链接 | 官方blog
    • 版权所有:IT技术江湖 @2007-2008
    • powered by www.hack1st.com online services. all rights reserved.京ICP备07005766号