XML + XSL之间的关系主要类似于 HTML + CSS的关系
XSL中文名字:扩展样式表语言
XSL洋文名字:EXtensible Stylesheet Language
XSL是操作XML的语言,它可以将XML转换成其他文档例如XHTML
源xml文档:Devices.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Device.xsl"?>
<Devices>
<Device>
<ID>JD20170110_A001</ID>
<Type axis="3">Axis3_400T</Type>
<IP>192.168.40.1</IP>
<Weight>2.3</Weight>
</Device>
<Device>
<ID>JD20170110_A002</ID>
<Type axis="3">Axis3_300VT</Type>
<IP>192.168.40.2</IP>
<Weight>2.1</Weight>
</Device>
<Device>
<ID>JD20170110_A003</ID>
<Type axis="5">Axis5_VT550</Type>
<IP>192.168.40.3</IP>
<Weight>3.2</Weight>
</Device>
</Devices>
1.xsl:if & xsl:for-each
<!--xsl:if语法结构-->
<xsl:if test="">
<...>
</xsl:if>
test后面为要判断的条件,如果条件成立就进入xsl:if的内层逻辑中去
[Device.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>Device</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>ID</th>
<th>Type</th>
<th>IP</th>
</tr>
<xsl:for-each select="Devices/Device">
<!--选择重量小于3以下的对象-->
<xsl:if test="Weight < 3">
<tr>
<td><xsl:value-of select="ID"/></td>
<td><xsl:value-of select="Type"/></td>
<td><xsl:value-of select="IP"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
浏览器打开结果:
(目前使用的是ie浏览器打开的)
2.xsl:choose & xsl:when & xsl:otherwise
<!--xsl:choose语法结构-->
<xsl:choose>
<!--类似于if - else if - else的结构-->
<xsl:when test="">
</xsl:when>
<xsl:when test="">
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
[Device.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>xsl:choose & xsl:when & xsl:otherwise</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>ID</th>
<th>Type</th>
<th>IP</th>
<th>Weight</th>
</tr>
<xsl:for-each select="Devices/Device">
<tr>
<td><xsl:value-of select="ID"/></td>
<td><xsl:value-of select="Type"/></td>
<td><xsl:value-of select="IP"/></td>
<xsl:choose>
<xsl:when test="Weight < 2.2">
<td bgcolor="#20ff20">
<xsl:value-of select="Weight"/></td>
</xsl:when>
<xsl:when test="Weight > 2.5">
<td bgcolor="#ff00ff">
<xsl:value-of select="Weight"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="Weight"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
浏览器打开结果:
3.xsl:var & xsl:copy-of
<!--xsl:var语法特点-->
<!--name:必选-->
<!--select:可选-->
<xsl:var name="var" select="value">
<...>
</xsl:var>
定义一个名字为var的变量,如果定义了select则该变量等于select后面的值,如果未定义则var表示后面的结构
[Device.xsl]:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--定义名字为header的变量,表示里面的表头结构-->
<xsl:variable name="header">
<tr bgcolor="#9acd32">
<th>ID</th>
<th>IP</th>
</tr>
</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>xsl:var & xsl:copy-of</h2>
<table border="1">
<xsl:copy-of select="$header" />
<xsl:for-each select="Devices/Device">
<tr>
<td><xsl:value-of select="ID"/></td>
<td><xsl:value-of select="IP"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
浏览器打开结果:
4.xsl:template & xsl:apply-templates & xsl:call-template
xsl:template
<!--xsl:template语法特点-->
<!--所有属性都是可选的,但是name和match必须得有一个-->
<xsl:template name="name" match="pattern" mode="mode" priority="number">
<!-- Content:(<xsl:param>*,template) -->
</xsl:template>
priority表示优先级
match=”/”定义整个xml文档
[Device.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>Devices</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<!--定义适用于Device模版-->
<xsl:template match="Device">
<p>
<xsl:apply-templates select="ID"/>
<xsl:apply-templates select="Type"/>
</p>
</xsl:template>
<!--定义适用于ID模版-->
<xsl:template match="ID">
ID: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
<!--定义适用于Type模版-->
<xsl:template match="Type">
Type: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
</xsl:stylesheet>
浏览器打开结果:
xsl:applay-template
<!--xsl:applay-template语法特点-->
<!--所有属性都是可选的-->
<xsl:applay-template select="" mode="">
<!-- Content:(xsl:sort|xsl:with-param)* -->
</xsl:applay-template>
select:适配的对象
mode:如果存在为相同元素定义的多个处理方法,那么用 mode 可以区分它们
[Device.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="ID">
<!--把所有符合ID元素应用成h1-->
<h1><xsl:apply-templates/></h1>
</xsl:template>
</xsl:stylesheet>
浏览器打开结果: