XSL 指扩展样式表语言(EXtensible Stylesheet Language),可描述如何来显示 XML 文档。
XSL 包括三部分:XSLT、XPath、XSL-FO
1 XSLT
XSLT = XSL 转换,是一种用于将 XML 文档转换为 XHTML 文档或其他 XML 文档的语言。
XSLT 使用 XPath 来定义源文档中可匹配一个或多个预定义模板的部分。一旦匹配被找到,XSLT 就会把源文档的匹配部分转换为结果文档。
1.1 样式表声明
把文档声明为 XSL 样式表的根元素是 xsl:stylesheet 或 xsl:transform。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--Or-->
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
1.2 样式表模板
1)xsl:template 元素
用于构建模板。
match 属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。match 属性的值是 XPath 表达式(举例,match=“/” 定义整个文档)。
2)xsl:value-of 元素
用于提取某个选定节点的值,并把值添加到转换的输出流中。
select 属性的值是一个 XPath 表达式。
3)xsl:for-each 元素
用于选取指定的节点集中的每个 XML 元素。
select 属性的值是一个 XPath 表达式。
4)xsl:sort 元素
用于对结果进行排序。
select 属性的值是一个 XPath 表达式。
5)xsl:if 元素
<xsl:if test="expression">
...
...如果条件成立则输出...
...
</xsl:if>
6)xsl:choose 元素
<xsl:choose>
<xsl:when test="expression">
... 输出 ...
</xsl:when>
<xsl:otherwise>
... 输出 ....
</xsl:otherwise>
</xsl:choose>
1.3 实例
1)原始 XML 文档
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
.
</catalog>
2)创建 XSL 样式表
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
3)把 XSL 样式表链接到 XML 文档
链接转换
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
.
</catalog>
2 XPath
XPath 是一种用于在 XML 文档中进行导航的语言。
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。
XPath 节点
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
2.1 语法
1)路径表达式
最有用的路径表达式
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
… | 选取当前节点的父节点。 |
@ | 选取属性。 |
2)谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点。
谓语被嵌在方括号中。
路径表达式 | 结果 |
---|---|
/bookstore/book[1] | 选取属于 bookstore 子元素的第一个 book 元素。 |
/bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 |
/bookstore/book[position()< 3] | 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。 |
//title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。 |
3)选取未知节点
XPath 通配符可用来选取未知的 XML 元素。
通配符 | 描述 |
---|
- |匹配任何元素节点。 @* |匹配任何属性节点。 node() |匹配任何类型的节点。
4)选取若干路径
通过在路径表达式中使用“|”运算符,可以选取若干个路径。
2.2 实例
Java SE 5.0 增加了一个 API 来计算 XPath 表达式
- 从 XPathFactory 创建一个 XPath 对象
XPathFactory xpfactory = XPathFactory.newInstance();
path = xpfactory.newXPath();
- 计算 XPath 表达式
String result = path.evaluate(expression, doc);
NodeList nodes = (NodeList)path.evaluate(expression, doc, XPathConstants.NODESET);
Node node = (Node)path.evaluate(expression, doc, XPathConstants.NODE);
int count =((Number)path.evaluate(expression, doc, XPathConstants.NUMBER)) .intValue();
//从任意一个节点或节点列表开始
result = path.evaluate(expression, node);