XML—— XSL 转换

【0】README

0.1) 本文文字描述转自 core java volume 2 , 旨在理解 XML—— XSL 转换 的基础知识 ;
0.2)XSL 转换: XSL 转换(eXtensible StyleSheet Language==扩展样式表语言)
(for detailed XSLT, please visit http://blog.csdn.net/pacosonswjtu/article/details/50571734)


【1】XML—— XSL 转换基础相关

1)XSL转换(XSLT)机制定义:可以将XML 文档转换为其他格式的规则。(干货——XSLT的转换和作用)

  • 1.1)XSLT的作用: XSLT 通常用来将某种机器可读的XML 格式转移为另一种机器可读的格式,或者将 XML 转译为适合人类阅读的表示格式;

2)你需要提供 XSLT 样式表, 它描述了 XML 文档向某种格式转换的规则。 XSLT 处理器将读入XML 文档和这个样式表, 并产生所要的输出。(见下图);
这里写图片描述

3)看个荔枝(吧 XML 文件转换为 HTML文件)

  • 3.1)输入文件:
<staff><employee><name>a</name><salary>1</salary><hiredate year="1999" month="12" day="15" /></employee>......
</staff>
  • 3.2)我们希望输出的html 文件为:
<table><tr><td>a</td> <td>1</td><td>1999-12-15</td></tr>
</table>

4)具有转换模板的样式表形式如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transformation="1.0">
<xsl: output method="html">template1template2......
</xsl:stylesheet>
  • 4.1)在我们的例子中, xsl:output 元素: 将方法设定为 HTML。 而其他有效的方法设置为 xml 和 text;
  • 4.2)下面是一个典型的template: (干货——样式表转换模板定义)
<xsl: template match="/staff/employee"><tr><xsl:apply-templates></tr>
</xsl: template>
  • 4.3) match 属性值是一个 XPaht 表达式。该模板说明,每当看到 XPath 集 /staff/employee 中的一个节点时, 将做以下操作(Operation):

  • O1) 产生字符串< tr>;

  • O2)对于要处理子元素继续应用模板;
  • O3)当处理完所有子元素后, 产生字符串 ;
  • 换句话说, 该模板围绕每个雇员记录生成 HTML 表格的行标记;

5)XSLT 处理器由检查根元素开始其处理过程。

  • 5.1) 每当一个节点匹配某个模板时,就应该应用该模板, 如果没有匹配的模板, 处理器会执行默认操作,如下:
    • Default1) 对于文本节点, 默认操作是吧它 的内容囊括到输出中去;
    • Default2)对于元素, 默认操作不会产生任何输出, 但会继续处理其子节点;

6)看个荔枝: 下面是一个用来转换雇员记录文件中的name 节点的模板;

<xsl: template match="/staff/employee/name"><td><xsl: apply-templates></td>
</xsl: template>
  • 6.1)这样, 模板产生定界符< td>。。。< /td>,, 并且请求处理器递归访问 name 元素 的 子节点;

7)如果想把 属性值复制到输出中去, 就必须做一些复杂操作,如下:

<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 />
  • 7.1)当处理 hiredate节点时, 该模板会产生:
字符串<td>;
year属性值;
一个连字符;
month属性值;
一个连字符;
day属性值;
一个连字符;
字符串</td>;
  • 7.2) xsl:value-of 语句:用于计算节点集的 字符串值, 其中,节点集 由 select 属性 的 XPath 值指定;
  • 7.3)节点集通过连接各个节点的字符的字符串值被转换成一个字符串。 属性节点的字符串值就是它的值, 文本节点的字符串值是它 的内容, 元素节点的字符串值是它子节点(而不是属性)的字符串值的连接;

8)在java 平台下产生 XML 的转换及其简单,只需为每个样式表设置一个转换器工厂, 然后得到一个转换器对象, 并告诉它把一个源转换成结果;

File stylesheet = new File(filename);
StreamSource styleSource= new StreamSource(stylesheet);Transformer t = TransformerFactory.newInstance().newTransformer(styleSource);
t.transform(source, result);
  • 8.1)Transform方法的参数是 Source 和 Result 接口的实现类的对象。 Source 接口有4个实现类:
DOMSource
SAXSource
StAXSource
StreamSource
  • 8.2)可以从 一个文件, 流, 阅读器或 URL , 以及来自 DOM 树节点的 DOMSource 来构建一个 StreamSource;
  • 8.3)用于转换器的SAXSource 是从 XML 阅读器构建的:
t.transform(new SAXSource(new EmployeeReader(), new InputSource(new FileInputStream(filename))), result);
  • 8.4)这是一个非 XML 的遗留数据转换成 XML 的一个小技巧。当然, 大多数 XSLT 应用程序都已经有了XML 格式的输入数据, 只需要在 一个 StreamSource 对象上调用transform 方法即可, 如: t.transform(new StreamSource(file), result);
  • 8.5)其转换结果是 Result 接口实现的一个对象, java 库提供了3个类:
DOMResult
SAXResult
StreamResult
  • 8.6)如果要把结果存储到 DOM 树中,请使用 DocumentBuilder产生一个新的文档节点, 并将其包装到 DOMResult中:
Document doc = builder.newDocument();
t.transform(source, new DOMResult(doc));
  • 8.7)如果要将输出保存到文件中, 请使用 StreamResult:
t.transform(source, new StreamResult(file));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法三之堆排序

一、堆(Heap)定义 &#xff08;1&#xff09;n个关键字序列Kl&#xff0c;K2&#xff0c;…&#xff0c;Kn称为&#xff08;Heap&#xff09;&#xff0c;当且仅当该序列满足如下性质&#xff08;简称为堆性质&#xff09;&#xff1a; k(i)<k(2i&#xff09;且k(i)<k(2i…

计算机宏如何设置方法,excel 如何启用宏的方法,以及如何设置excel启用宏

如何启用宏呢&#xff1f;在进行如何启用宏讲解之前&#xff0c;先来认识&#xff0c;Excel几个其余宏相关的知识点。如果Excel工作簿中包含宏&#xff0c;则将在打开工作簿之前对其进行扫描&#xff0c;以检查是否存在已知病毒。Excel宏设置有四个选项&#xff0c;如下图所示&…

怎么清理句柄_JAR文件句柄:混乱后清理!

怎么清理句柄在Ultra ESB中&#xff0c;我们使用特殊的热交换类加载器 &#xff0c;该加载器使我们可以按需重新加载Java类。 这使我们能够从字面上热交换我们的部署单元 -加载&#xff0c;卸载&#xff0c;使用更新的类重新加载&#xff0c;以及正常地逐步退出-无需重启JVM。 …

XML——生成 XML 文档(读入 XML的反向过程)

【0】README 0.1&#xff09; 本文文字描述转自 core java volume 2 &#xff0c; 旨在理解 XML——生成 XML 文档&#xff08;读入 XML的反向过程&#xff09; 的基础知识 &#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core…

算法四之冒泡排序

一、冒泡排序&#xff08;Bubble Sort&#xff09;思想 &#xff08;1&#xff09;冒泡排序&#xff08;Bubble Sort&#xff09;&#xff0c;是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误…

java 使用sdk_使用SDKMAN管理多个Java SDK! 轻松

java 使用sdkSDKMAN&#xff01; 是用于管理多个软件开发套件的并行版本的便捷工具。 该工具对Java开发人员特别有用&#xff0c;因为它支持JVM的SDK&#xff0c;例如Java&#xff0c;Groovy&#xff0c;Scala&#xff0c;Kotlin和Ceylon。 还支持Gradle&#xff0c;Maven&…

ftp服务器在线查看文件内容,ftp服务器PDF文件在线查看的实现方法

URL形式&#xff1a;// http://localhost:2692/PDFVIEWER/web/viewer.html?filehttp://localhost:2692/TOV/DASystem/GetStreaem?path%3Dftp://ftp账号:ftp密码IP地址/0001/E_File3/2017526/test.PDF注意&#xff1a;PDFVIEWER/web/viewer.html是一个PDF插件地址链接后台方法…

XML——写出XML文档(XSLT+StAX)

【0】README 0.1&#xff09; 本文描述部分转自 core java volume 2 &#xff0c; 旨在理解 XML——写出XML文档&#xff08;XSLTStAX&#xff09; 的基础知识 &#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume…

算法五之快速排序

一、快速排序&#xff08;Quicksort&#xff09;思想设要排序的数组是A[0]……A[N-1]&#xff0c;首先任意选取一个数据&#xff08;通常选用数组的第一个数&#xff09;作为关键数据&#xff0c;然后将所有比它小的数都放到它前面&#xff0c;所有比它大的数都放到它后面&…

jvm 助记符_您的JVM是否泄漏文件描述符-像我的一样?

jvm 助记符前言&#xff1a;此处描述的两个问题是在一年前发现并修复的。 本文仅用作历史证明&#xff0c;也是有关解决Java中文件描述符泄漏的初学者指南。 在Ultra ESB中&#xff0c;我们使用内存RAM磁盘文件缓存来进行快速且无垃圾的有效负载处理。 一段时间以前&#xff0…

08r2系统服务器开索引,SQLSERVER2008R2正确使用索引

T1表 10000000万条数据,(插入时间36分钟&#xff0c;count(*)查询19秒&#xff0c;空间占用670M左右)sql1.真正充分的利用索引好比like 张% 就是符合SARG(符合扫描参数)标准而like %张 就不符合该标准数据库通配符%在字符串首字符的使用会致使索引没法使用&#xff0c;虽然实际…

算法六之直接插入排序

一、直接插入排序基本思想 直接插入排序(straight insertion sort)的做法是&#xff1a;每次从无序表中取出第一个元素&#xff0c;把它插入到有序表的合适位置&#xff0c;使有序表仍然有序。第一趟比较前两个数&#xff0c;然后把第二个数按大小插入到有序表中&#xff1b; 第…

网络——连接到server

【0】README 0.1&#xff09; 本文描述部分转自 core java volume 2 &#xff0c; 旨在理解 网络——连接到server 的基础知识 &#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/…

文件服务器监控用户修改信息,文件服务器监控日志软件

文件服务器监控日志软件 内容精选换一换有以下几种现象&#xff1a;将制作好的SD卡插入开发者板并上电后&#xff0c;开发者板LED1与LED2灯状态信息异常。将制作好的SD卡插入开发者板&#xff0c;并通过USB方式连接Ubuntu服务器&#xff0c;上电、开发者板启动完成后&#xff0…

java –cp ./:_成为Java流大师–第3部分:终端操作

java –cp ./:比尔盖茨曾经说过&#xff1a;“我选择一个懒惰的人去做一件困难的事情&#xff0c;因为一个懒惰的人会找到一个简单的方法来做。” 关于流&#xff0c;没有什么比这更真实了。 在本文中&#xff0c;您将学习Stream如何通过在调用终端操作之前不对源元素执行任何计…

Oracle入门(四)之查询基本信息

一、查询基本信息 &#xff08;1&#xff09; 查询实例服务SQL> show parameter instance name&#xff08;2&#xff09;查询数据库名字SQL> show parameter db_name;&#xff08;3&#xff09;查询数据库名字SQL>select name from v$database;&#xff08;4&#xf…

网络——实现服务器

【0】README 0.1&#xff09; 本文描述部分转自 core java volume 2 &#xff0c; 旨在理解 网络——实现服务器 的基础知识 &#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/ch…

image 闪烁 c# ajax updatepanel,Why doesn't asp:UpdatePanel refresh an Image?

问题I have the following UpdatePanel that gets an image from an ashx handler all of which works fine when the page is refreshed. However, when the timer fires, the label is refreshed with current time, but never the image.ImageUrl"~/getImage.ashx?cam…

kafka处理流式数据_通过Apache Kafka集成流式传输大数据

kafka处理流式数据从实时过滤和处理大量数据&#xff0c;到将日志数据和度量数据记录到不同来源的集中处理程序中&#xff0c;Apache Kafka越来越多地集成到各种系统和解决方案中。 使用CData Sync &#xff0c;可以轻松地将此类解决方案应用于任何CRM&#xff0c;ERP或Analyti…

Oracle入门(十一)之SQL

一、SQL组成 SQL的组成 核心SQL主要有四个部分&#xff1a; 1、数据定义语言即SQL DDL(Data Definition Language )&#xff0c;用于定义 SQL模式、基本表、视图、索引等结构。 CREATE、ALTER、DROP、REVOKE、GRANT2、数据操纵语言 即SQL DML(Data Manipulation Language)。 数…