JavaEE XML XSL转换(XSLT)
XSL转换(XSLT)
@author ixenos
定义:
XSL转换机制可以指定将XML文档转换为其他格式的规则,例如,txt纯文本、XHTML或其他任何XML格式。
用途:
XSLT通常用来将某种机器可读的XML格式转译为另一种机器可读的XML格式,或者将XML转译为适合人类阅读的表示格式
步骤:
1、 需要提供XSLT样式表,它描述了XML文档向某种格式转换的规则
2、 XSLT处理器读入XML文档和XSLT样式表,产生所要的输出
XSLT样式表:
<?xml version=”1.0” encoding=”utf-8”?>
<xsl:stylesheet
Xmlns:xsl=http://www.w3c.org/1999/XSL/Transform
Version=”1.0”>
<xsl:output method=”html”/> //指定输出的格式为HTML,其他有XML、text
Template1 模板
.
.
.
Template2
</xsl:stylesheet>
模板示例:
<xsl:template match=”/staf/employee”>
<tr><xsl:apply-templates/></tr>
</xsl:template>
match属性的值是一个XPath表达式
该模板表示:每当看懂啊XPath集/staff/employee中的一个节点时
(1) 产生字符串<tr>
(2) 对于要处理的子元素继续应用模板(会递归!)
(3) 当处理完所有所有子元素后,产生字符串</tr>
把属性值复制到输出中的模板:
<xsl:template match=”/staff/employee/hiredate”>
<td><xsl:value-of select=”@year”/>-<xsl:value-of select=”@month”/>-<xsl:value-of select=”@day”/></td>
</xsl:template>
这里xsl:value-of语句用于计算,由select的XPath值指定的节点集(属性节点)的,字符串值
XML转HTML示例:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html"/> //指定输出为html格式
<xsl:template match="/staff"> //使用XPath来分别定位
<table border="1"><xsl:apply-templates/></table>
</xsl:template>
<xsl:template match="/staff/employee"> //使用XPath来分别定位
<tr><xsl:apply-templates/></tr>
</xsl:template>
<xsl:template match="/staff/employee/name"> //使用XPath来分别定位
<td><xsl:apply-templates/></td>
</xsl:template>
<xsl:template match="/staff/employee/salary"> //使用XPath来分别定位
<td>$<xsl:apply-templates/></td>
</xsl:template>
<xsl:template match="/staff/employee/hiredate"> //使用XPath来分别定位
<td><xsl:value-of select="@year"/>-<xsl:value-of
select="@month"/>-<xsl:value-of select="@day"/></td>
</xsl:template>
</xsl:stylesheet>
转换成纯文本示例:
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:template match="/staff/employee">
employee.<xsl:value-of select="position()" //注意中间生造了文本employee.
/>.name=<xsl:value-of select="name/text()"/>
employee.<xsl:value-of select="position()"
/>.salary=<xsl:value-of select="salary/text()"/>
employee.<xsl:value-of select="position()"
/>.hiredate=<xsl:value-of select="hiredate/@year"
/>-<xsl:value-of select="hiredate/@month"
/>-<xsl:value-of select="hiredate/@day"/>
</xsl:template>
</xsl:stylesheet>
Java平台下的XSL转换(XSLT):
(1)为每个样式表设置一个转换器工厂,得到一个转换器对象,并让它把一个源转换成结果
File styleSheet = new File(fileName); //某个xsl文件
StreamSource styleSource = new StreamSource(styleSheet);
Transformer t = TransformerFactory.newInstance().newTransformer(styleSource);
t.transform(source, result);
(2)谈谈source和 result
Source接口有四个实现类:DOMSource、SAXSource、StAXSource、StreamSource,这些类使我们能通过文件、流、Reader、URL、DOM树节点来传入一个source
比如:来自DOM树节点的DOMSource(传入Document就相当于整个树)
Result接口有三个实现类:DOMResult、SAXResult、StreamResult
如果要把转换结果存储到DOM树中,那就再创建一个新的文档节点包装到DOMResult中:
Document doc = builder.newDocument();
t.transform(source, new DOMResult(doc));
如果要把转换结果保存到文件中,可以使用StreamResult
t.transform(source, new StreamResult(file));
题外话: 将非XML的遗留数据转换成XML的一个小技巧
Source中的SAXSource可以 从XMLReader接口的SAX实现获得!可以不必从一个现有XML文件开始工作。
先上代码:
t.transform(new SAXSource(new EmployeeReader(), new InputSource(new FileInputStream(filename))), result);
其中EmployeeReader就是XMLReader的SAX实现类,InputSource就是文件来源,result决定保存的形式
当然,大多数XSLT应用程序都已经有了XML格式的输入数据,此时只需在一个StreamSource对象上调用transform方法即可:
t.transform(new StreamSource(file), result);
JavaEE XML XSL转换(XSLT)的更多相关文章
- XSLT可扩展样式表语言转换 System.Xml.Xsl、XslCompiledTransform类
XML文件 books.xml: <?xml version="1.0" encoding="utf-8" ?> <bookstore> ...
- 微软BI 之SSIS 系列 - XML Task 中XSLT 样式表转换错误记录
开篇介绍 此文章专门记录 XSLT 样式表转换过程中的语法问题 错误一 值与属性的倒置 修改了几次样式表,但还是一如既往的报错,报错信息如下: [XML Task] Error: An error o ...
- XML、XSL、XSLT、DTD、XSD的区别
前言: 在众神的努力之下,js已经可以跨出浏览器走向不同的领域了 也因为这个,对前端工程师的要求也不仅仅是会写写h5页面做交互.前端涉及的领域越来越广,对开发人员对素质能力要求越高. 以前因设备不同导 ...
- XML wsdl soap xslt xsl ide
XML wsdl soap xslt xsl ide 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn. ...
- JavaEE XML DOM创建
DOM创建XML @author ixenos 1.思路: 先封装构建一颗DOM树,然后将DOM树转换成XML文件 2.三种写DOM树到XML文件的方式: 1)使用DOM(或DOM4J.JDOM) 2 ...
- C#执行XSL转换
xsl 可方便的将一种格式的xml,转换成另一种格式的xml,参考下面的代码: using System; using System.IO; using System.Text; using Syst ...
- JavaEE XML XPath
JavaEE XML XPath @author ixenos XPath技术 1 引入 问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!!需要遍历DOM树的众多节点 ...
- 利用JAXB实现java实体类和xml互相转换
1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...
- 将Xml字符串转换成(DataTable || DataSet || XML)对象
今天用到一个功能:就是把从数据库读出来的内容转换成XML字符串流格式,并输出给一个功能函数.在写的过程,为方便以后的使用,我对这一功能进行分装.该类的具体格式如下:XmlConvert类命名空间:Ni ...
随机推荐
- MVC 控制器激活
MVC 控制器激活 ASP.NET MVC 控制器激活(三) 前言 在上个篇幅中说到从控制器工厂的GetControllerInstance()方法来执行控制器的注入,本篇要讲是在GetControl ...
- SOA、ESB、NServiceBus、云计算
SOA.ESB.NServiceBus.云计算 总结 SOA SOA 是通过功能组件化.服务化,来实现系统集成.解决信息孤岛,这是其主要目标.而更进一步则是实现更快响应业务的变化.更快推出新的应用系统 ...
- web开发人员
随笔- 4 文章- 18 评论- 12 [译]作为一个web开发人员,哪些技术细节是在发布站点前你需要考虑到的 前日在cnblogs上看到一遍文章<每个程序员都必读的12篇文章> ...
- select省市联动选择城市 asp.net mvc4
本文在 http://www.cnblogs.com/darrenji/p/3606703.html(感谢博主的分享)基础上加入全国各省市,从文件中读取全国省市县,组成省市联动的选择标签 在Model ...
- VS2012下systemC配置
一.编译System库 1.下载SystemC library source code 到http://www.systemc.org注册会员账号后,即可下载SystemC ...
- ASP.NET MVC 缓存扩展 - Donut Caching
项目介绍 ASP.NET MVC Extensible Donut Caching brings donut caching to ASP.NET MVC 3 and later. The code ...
- Web应用架构的新趋势
系统架构:Web应用架构的新趋势---前端和后端分离的一点想法 最近研究servlet,看书时候书里讲到了c/s架构到b/s架构的演变,讲servlet的书都很老了,现在的b/s架构已经不是几年前 ...
- C#算两个时间段相差的时间
在数据中经常算两个时间差或者在某个时间段的内容 在数据库中设计表字段类型的时候设计为varchar类型,然后进行可以再Sql语句中书写>=或者<=这样的进行比较就可以查询出某个时间段的内容 ...
- centos安装及配置
centos安装 从网上下载最新的版本,用ultraiso做好系统盘,启动.安装过程没有什么可以说的,与其他发行版有点不同的是需要将安装包放到u盘根目录下(u盘容量最好大点,8~16G最好).开始没注 ...
- SQLSERVER一些公用DLL
SQLSERVER一些公用DLL的作用解释 SQLSERVER一些公用DLL的作用解释 如果你的SQLSERVER安装在C盘的话,下面的路径就是相应SQLSERVER版本的公用DLL的存放路径 S ...