动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.Struts中用动态选择的元素创建复.
.Java 3D 绘图性能.
.Java中使用正则表达式验证本地化.
.什么是 JScript?.
.大道至简-Java之23种模式一点就通.
.Javascript实例教程(7) 利用Java.
.struts构建文件上传(六).
.用DB2 UDB版本8开发企业Jav.
.DataGrid表格上字符串的HTML编码.
.垃圾自动收集系统指导 (2).
.核心API最佳实践——JDK日志分级.
.Applet与Servlet通讯的四种方法及.
.Servlet + Tomcat 中文乱码的原理.
.一些错误地解决方法.
.Web开发设计:DisplayTag应用指南.
.Java对象持久化技术之Hibernate入.
.学会怎么用Java Web Start部署应.
.struts构建文件上传(2).
.J2ME MIDP 提供的最重要的图形元.
.Thinking in Java第三版读书笔记.

用Java增加一个XSLT功能

发表日期:2008-1-5 |



  开发XSLT解决方案可以很简单,只需要少量的工作执行转换。但是,有时候源文档和目标文档是比较复杂的,不同的。很多这种情况下,复杂的转换是通过等价的XSLT复杂转换实现的。

有些转换使用普通的XSLT功能是没法做到的。这种情况下,你可以使用Apache Xalan XSLT引擎和自定义的Java扩展在你的样式表里加入新函数。

一个例子
让我们从测试一个简单的例子开始吧。假设你正在转换一个XML文档,你需要在转换过程中执行很多高级的操作。你也许需要参考历遍一个数据库中的表或者访问一个Web服务。这些函数很简单,但是XSLT没有直接提供。

我们假设:有了一个简单的定购XML文档,如清单1所示。那么问题是:我们的转换过程需要翻转Description元素中的字符。也许,它不符合现实世界中的情况,但是它可以演示了。

清单1:order.xml
〈Order〉
〈Items〉
〈Item〉
〈SKU〉19723〈/SKU〉
〈Description〉Mechawidget Flange〈/Description〉
〈/Item〉
〈Item〉
〈SKU〉87123〈/SKU〉
〈Description〉Hydrafluant Magnet〈/Description〉
〈/Item〉
〈Item〉
〈SKU〉662354〈/SKU〉
〈Description〉Generic Rubber Seal〈/Description〉
〈/Item〉
〈Item〉
〈SKU〉967623〈/SKU〉
〈Description〉Fluxating Plasmatron〈/Description〉
〈/Item〉
〈/Items〉
〈/Order〉
解决方法

我们的解决方法是使用Apache Xalan XSL 处理器,并从它扩展出一个Java类。这个Java组件实现字符串数据的转换工作。XSL样式表访问这个Java类,把XML数据传进去,在XML结果文档中显示返回值。每一步都列在下面了。

Java部分
为了解决这个问题,我们首先需要写一个完成这个工作的Java代码。既然这样,我们将使用一个简单的字符串翻转类,如清单2所示:

清单2:Reverse.java

public class Reverse {
public static String reverse(String str) {
String retval = "";
char[] b = new char[str.length()];
str.getChars(0, str.length(), b, 0);
for (int i = (b.length - 1); i 〉= 0; i--) {
retval += b[i];
}
return retval;
}
}

这个类只有一个静态方法:reverse。这个方法的有一个String参数,返回一个字符串。这个函数将翻转字符串:从String类从读取字符到一个字符数组,然后从数组的尾部历遍字符。

XSLT部分
为了在XSL样式表中使用Java类,你需要声明一个XML命名空间。这个命名空间会识别调用Java类的格式。这里有3个不同的命名空间的格式供你使用:我们演示其中一个,Java格式如下:

xmlns:java=http://xml.apache.org/xalan/java

除了要声明java命名空间外,我们还需要设置〈xsl:stylesheet〉 元素的exclude-result-prefixes属性。这个属性会避免Java命名空间出现在输出文档里。

为了在XSL样式表里正确地调用Java组件,你需要指定类,方法和传入的参数。类必须以命名空间为前缀。比如,调用我们Reverse类的reverse()方法,就要这样做:

〈xsl:value-of select="java:Reverse.reverse(′This is a test′)" /〉

传入的值可以是一个静态的值(同上)或XML文档里的值。清单3列出了我们的XSL样式表,它包含了命名空间的声明,exclude-result-prefixes属性和〈Description〉元素的值:调用reverse()方法。

清单3:order.xsl
〈?xml version="1.0"?〉
〈xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:java="http://xml.apache.org/xalan/java"
exclude-result-prefixes="java"〉
〈xsl:output method="xml"/〉
〈xsl:template match="/Order"〉
〈NeWorder〉
〈xsl:apply-templates/〉
〈/NewOrder〉
〈/xsl:template〉
〈xsl:template match="Items/Item"〉
〈Item〉
〈SKU〉〈xsl:value-of select="./SKU" /〉〈/SKU〉
〈Description〉〈xsl:value-of select="java:Reverse.reverse(./Description)" /〉
〈/Description〉
〈/Item〉
〈/xsl:template〉
〈/xsl:stylesheet〉

可重用组件
在样式表里使用Java类的部分价值是答应你重用Java组件。举例说,假如你有了一个业务逻辑或者访问数据仓库或企业应用的信息的类,那么在你的XSL应用中的重用就很强大了。同样,你可以重用为其他企业应用的XSL创建的Java扩展。
上一篇:用JAXB生成一个XML文档 人气:505
下一篇:开源面向对象数据库db4o之旅:初识db4o 人气:379
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号