【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));

XML—— XSL 转换相关推荐

  1. html转换成xsl,xml+xsl转换为html

    搜索热词 项目需要,需要使用xml+xsl转换为html文件存储. 以前也没做过这样的功能,上网搜索到的结果基本上xml和xsl都是以文件的形式保存和输入的,但我这里已经是拿到字符串了,所以考虑是否能 ...

  2. java html转换xml文件,使用Java在HTML中转换XML + XSL

    我们将数据作为XML使用,并且存在多种格式化XSL样式.在IE中它一直工作得很好.使用Java在HTML中转换XML + XSL 然后,我们需要在Chrome中显示与HTML相同的内容.所以,我们在服 ...

  3. XSL 转换:XSLT 可缓和 XML 架构的不相容性问题[网淘]

    XSL 转换:XSLT 可缓和 XML 架构的不相容性问题 发布日期: 4/14/2004| 更新日期: 4/14/2004 Don Box,Aaron Skonnard,John Lam 本文假设您 ...

  4. android transform xml xsl,XslCompiledTransform.Transform 方法 (System.Xml.Xsl) | Microsoft Docs

    使用 URI 指定的输入文档执行转换,然后将结果输出到 XmlWriter.Executes the transform using the input document specified by t ...

  5. xsl调用java方法传参_Java中的XSL转换:一种简单的方法

    xsl调用java方法传参 XSL转换 (XSLT)是将一个XML文档转换为另一个XML文档的强大机制. 但是,在Java中,XML操作相当冗长和复杂. 即使是简单的XSL转换,也必须编写几十行代码- ...

  6. Java中的XSL转换:一种简单的方法

    XSL转换 (XSLT)是将一个XML文档转换为另一个XML文档的强大机制. 但是,在Java中,XML操作相当冗长和复杂. 即使是简单的XSL转换,也必须编写几十行代码-如果需要适当的异常处理和日志 ...

  7. php处理微信返回xml数据,php将微信返回的xml格式转换成数组

    废话不多说直接上代码 代码<?php header("Content-type: text/html; charset=utf-8"); date_default_timez ...

  8. java bean与xml转换_Java Bean与xml互相转换的方法分析

    本文实例讲述了Java Bean与xml互相转换的方法.分享给大家供大家参考,具体如下: XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦.下面介 ...

  9. php xml 互相转换

    php xml 互相转换 正好昨天才做过类似的需求--几行代码就可以搞定. 如果你使用 curl 获取的 xml data $xml = simplexml_load_string($data); $ ...

最新文章

  1. 三维形状和外观重建一次全搞定: DeepSurfels在线融合实现逼真重建
  2. JRebel for Android 编译神器
  3. CSS选择器分类与优先级
  4. mysql物流管理系统_wuliuwang 物流信息管理系统 ssh2 mysql(Logistics Information Management System) - 下载 - 搜珍网...
  5. spring mvc后端校验validator
  6. Product change时关于change_log的讨论
  7. 系统备份是对计算机硬件进行维户吗,计算机系统维护毕业论文_精品.doc
  8. C语言程序设计基础之结构
  9. Assembly.Load,LoadFile,LoadFrom
  10. 【EASYDOM系列教程】之属性操作
  11. Ubuntu中使用freeradius配置RADIUS,并在RADIUS中配置LDAP 并实现AP认证
  12. 管家婆 凭证查找 Date exceeds maximum of 19-12-31 报错管家婆 打开经营历程 Date exceeds maximum of 19-12-31 报错
  13. 黑马程序员——多态和抽象类的相关知识
  14. 「js基础」JavaScript入门,难不难你来说
  15. 【设计模式】七大原则之“依赖倒转原则”
  16. python数据可视化读取excell文件绘制图像详细教程
  17. Linux系统命令(网络通信)
  18. Adobe Acrobat 无法打开文件附件,因为您的PDF文件附件设置不允许打开本类型的文件
  19. 微信小程序获取WIFI列表可手动输入密码连接
  20. 网络数据安全法解读第三篇

热门文章

  1. Frogs HDU - 5514
  2. NC51189 Mondriaan‘s Dream
  3. H.Minimum-cost Flow
  4. 一起开心2020暑假训练第一周
  5. P6620 [省选联考 2020 A 卷] 组合数问题(斯特林数、下降幂)
  6. CF1146F: Leaf Partition(树形dp)
  7. jzoj4805-[NOIP2016提高A组模拟9.28]跟踪【dfs,树】
  8. 【做题记录】[NOIP2016 普及组] 魔法阵
  9. [NOIP2016 提高组] 天天爱跑步(树上差分)
  10. codefoces 939E Maximize!好题