学习笔记——XSLT转换器的使用(Xalan和Saxon) .(转)
转自:http://blog.csdn.net/crystalbruce/article/details/7401602
XSLT分为两类:
1:客户端转换:需要浏览器的支持。
2:服务器转换:需要使用编程将XML根据XSLT文档转换成相应的HTML,在输出到客户端。
服务器转换分为两类:
1:实时转换:当服务器接收客户端请求后,借助于JSP、PHP等动态脚本语言临时根据XSLT转换XML,然后在将转换后的HTML发送给客户端。
2:批量转换:服务器定期转换XML,当服务器接收到请求后直接将已有的HTML发送给客户端,适用于XML变化频率较低的情况。
常用的XSLT转换处理器:
1:Xalan:Apache的子项目。网站http://xalan.apache.org
2:Saxon:SourceForge的子项目。网站http://saxon.sourceforge.net
Xalan处理器
所需包:
xalan.jar:Xalan的核心类库,需要依赖于serializer.jar。
xercesImpl.jar、xml-apis.jar:Java API for XML Processing(JAXP)的核心类库。
使用方法:
xalan.jar本身就是一个可执行的程序。
一:在DOS中使用
输入
java -classpath serializer.jar -jar xalan.jar
命令会输出xalan.jar的各种选项,以下是常用选项:
-IN:指定需要转换的XML;
-XSL:指定使用的XSLT样式单,如果在XML文档中已经引入了XSLT,则可省略此项;
-OUT:指定转换后输出的目标文档。
示例:
java -classpath serializer.jar -jar xalan.jar -IN name.xml -OUT.name.html
二:使用在Web应用中编程方式
主要使用的类和接口如下:
1:TransformerFactory:转换器工厂,负责生产转换器;
2:Transformer:XSLT转换器,负责加载XSLT样式单文档,并执行转换;
3:Source:代表源XML文档的接口,其常用实现类有DOMSource、StreamSource、SAXSource;
4:Result:代表转换结果的文档接口,其常用实现类有DOMResult、StreamResult、SAXResult。
步骤:
1:使用TransformerFactory的newInstance()方法创建一个转换器工厂;
2:调用转换器工厂的newTransformer(Source xmlSource)方法创建一个转换器;
3:调用转换器的transform(Source xmlSource, Result OutputTarget)方法执行转换。
程序示例:
- <%@ page contentType="text/html; charset="UTF-8" language="java" errorPage="" %>
- <%@ page import="javax.xml.transform.*, javax.xml.transform.stream.*" %>
- <%
- //创建一个转换工厂
- TransformerFactory tFactory = TransformerFactory.newInstance();
- //用指定的XSLT样式单文件创建一个转换器
- Transformer transformer = tFactory.newTransformer(new StreamSource(application.getRealPath("WEB-INF/") + "/name.xslt"));
- //执行转换,并将转换后的目标文档作为响应输出
- transformer.transform(new StreamSource(application.getRealPath("WEB-INF/") + "/name.xml"), new StreamResult(response.getOutputStream()));
- %>
<%@ page contentType="text/html; charset="UTF-8" language="java" errorPage="" %>
<%@ page import="javax.xml.transform.*, javax.xml.transform.stream.*" %>
<%
//创建一个转换工厂
TransformerFactory tFactory = TransformerFactory.newInstance();
//用指定的XSLT样式单文件创建一个转换器
Transformer transformer = tFactory.newTransformer(new StreamSource(application.getRealPath("WEB-INF/") + "/name.xslt"));
//执行转换,并将转换后的目标文档作为响应输出
transformer.transform(new StreamSource(application.getRealPath("WEB-INF/") + "/name.xml"), new StreamResult(response.getOutputStream()));
%>
Saxon处理器
Saxon的功能很强大,其实现了XSLT3.0、XQuery3.0和XPath3.0等规范。
saxon9.jar与此名相似的为核心类库。
其使用方法与Xalan类似。
使用命令:
java -jar saxon9.jar -s:xmlSource.xml -o:outputTarget.html xsl:name.xslt
编程方法与Xalan的编程方法一样,因为都是面向JAXP规范编程
学习笔记——XSLT转换器的使用(Xalan和Saxon) .(转)的更多相关文章
- Office365学习笔记—Xslt自定义列表视图
1,在Office365中需要添加自定义的视图!用Spd添加视图,这儿我添加一个testView! (1)打开testView.aspx将</ZoneTemplate>节点中的内容全部删除 ...
- SpringMVC:学习笔记(6)——转换器和格式化
转换器和格式化 说明 SpringMVC的数据绑定并非没有限制,有案例表明,在SpringMVC如何正确绑定数据方面是杂乱无章的,比如在处理日期映射到Date对象上. 为了能够让SpringMVC进行 ...
- [原创]java WEB学习笔记67:Struts2 学习之路-- 类型转换概述, 类型转换错误修改,如何自定义类型转换器
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- Java学习笔记(一)
纯属个人学习笔记,有什么不足之处大家留言,谢谢 Java程序打包与JAR运行方法 在Eclipse的"包资源管理器"视图中找到要打包成JAR文件的项目.在项目名称上单击鼠标右键,在 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记68:Struts2 学习之路-- 类型转换与复杂属性配合使用
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
随机推荐
- My_Plan part1 小结
数位DP AC十道题目以上 成就达成 八月份!三个月!想想就令人兴奋呢 开始写总结啦 貌似简单的数位DP只需要改改模板就可以啦 就按照我的做题顺序开始总结吧 先是学习了一发模板:http://www. ...
- lintcode :sort letters by case字符大小写排序
题目 字符大小写排序 给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序. 您在真实的面试中是否遇到过这个题? Yes 样例 给出"abAcD",一个可能的答案为& ...
- Servlet获取当前服务器的实际路径
Servlet/Jsp需要操作服务器所拥有的资源,为此需要得到其绝对路径或实际路径, 在Servlet的doGet方法中加入以下代码可以查看服务器的实际路径. package com.mhb; imp ...
- 剖析MapReduce 作业运行机制
包含四个独立的实体: · Client Node 客户端:编写 MapReduce代码,配置作业,提交MapReduce作业. · JobTracker :初始化作业,分配作业,与 TaskTra ...
- BZOJ 3142 数列(组合)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3142 题意:给出n,K,m,p.求有多少长度为K的序列A,满足:(1)首项为正整数:(2 ...
- c扩展调用php的函数(调用实现php函数的c函数)
上一次是写的c扩展调用c的标准函数,但是只能调用头文件中申明的函数,今天来说下c扩展调用实现php函数的c函数,比方说,c扩展要用到php中ip2long这个函数,但是c不可能去php中调用,肯定是去 ...
- shell/bash 交集、并集、差集
方法一(直接用文件名):取两个文本文件的并集.交集.差集并:sort -m <(sort file1 | uniq) <(sort file2 | uniq) | uniq交:sort - ...
- [HDOJ3974]Assign the task(建树胡搞)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3974 出现在窝bin的线段树专题里…第一时间想的是记录入度找出根节点,然后标记深度转换到线段树中.但是 ...
- Effective C++学习笔记 条款05:了解C++默默编写并调用的哪些函数
一.如果用户没有提供构造函数.copy构造函数.copy assignment操作符和析构函数,当且仅当这些函数被需要的时候,编译器才会帮你创建出来.编译器生成的这些函数都是public且inline ...
- Deferred的那些知识
在移动开发中的各种中,我们一定会遇到异步回调的问题,比如: 1:Css3执行动画完毕, 回调 2:Jquery Animate动画的执行完毕, 回调 3:Ajax的执行(并行.串行),回调 等等 ...