参考
http://blog.51cto.com/cnn237111/1345998
https://www.w3.org/TR/2017/REC-xslt-30-20170608/
声明
把文档声明为 XSL 样式表的根元素是 <xsl:stylesheet> 或 <xsl:transform>。
根据 W3C 的 XSLT 标准,声明 XSL 样式表的正确方法是:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
或者:
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template>
XSL 样式表由一个或多套被称为模板(template)的规则组成.每个模板含有当某个指定的节点被匹配时所应用的规则.
<xsl:template match="???">
match 属性用于关联 XML 元素和模板.match 属性也可用来为整个文档定义模板.match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档).
<xsl:value-of>
<xsl:value-of> 元素用于提取某个选定节点的值,并把值添加到转换的输出流中.
<xsl:value-of select="???"/>
select 属性的值是一个 XPath 表达式.
<xsl:for-each>
<xsl:for-each> 元素可用于选取指定的节点集中的每个 XML 元素.
<xsl:for-each select="???">...</xsl:for-each>
select 属性的值是一个 XPath 表达式.
<xsl:sort>
<xsl:sort> 元素用于对结果进行排序.
如需对结果进行排序,只要简单地在 XSL 文件中的 <xsl:for-each> 元素内部添加一个 <xsl:sort> 元素.
<xsl:sort select="???"/>
select 属性指示需要排序的 XML 元素.
<xsl:if>
<xsl:if> 元素用于放置针对 XML 文件内容的条件测试.
<xsl:if test="expression">...如果条件成立则输出...</xsl:if>
必选的 test 属性的值包含了需要求值的表达式.
<xsl:choose>
XSLT <xsl:choose> 元素用于结合 <xsl:when> 和 <xsl:otherwise> 来表达多重条件测试.
<xsl:choose>
<xsl:when test="expression">... 输出...</xsl:when>
<xsl:otherwise>... 输出....</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates>
http://blog.51cto.com/cnn237111/1345998
<xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点.
<xsl:apply-templates/>总是包含在<xsl:template />中,当转换软件遇到这个语句时,就会对 <xsl:apply-templates/>所匹配的元素进行转换(所匹配的元素由select属性设置,该值是一个XPath中的路径表达式,并且和<xsl:template />中的match相关)。
<xsl:apply-templates/>在对元素应用模板的时候,会去文档中查看是否存在一个对应的模板(即该模板定义了如何转换 <xsl:apply-templates/>匹配的元素)。所谓处理转换,实际上就是把XML文档中的值,代入模板,并输出代入后的模板内容,类似变量赋值。
Demo
employee.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <?xml-stylesheet type="text/xsl" href="employee.xsl"?> 3 <employees> 4 <employee sn="E-200402100001"> 5 <name>zhangsan</name> 6 <age>25</age> 7 <monthly_pay mode="cash"> 8 1200.00 9 </monthly_pay> 10 <country> 11 <en>CHN</en> 12 <chinese>ZhongGuo</chinese> 13 </country> 14 </employee> 15 <employee sn="E-200402100006"> 16 <name>lisi</name> 17 <age>28</age> 18 <monthly_pay mode="cash"> 19 1600.00 20 </monthly_pay> 21 <country> 22 <en>CHN</en> 23 <chinese>ZhongGuo</chinese> 24 </country> 25 </employee> 26 <employee sn="E-200503220001"> 27 <name>wangwu</name> 28 <age>30</age> 29 <monthly_pay mode="credit_card"> 30 3500.00 31 </monthly_pay> 32 <country> 33 <en>CHN</en> 34 <chinese>ZhongGuo</chinese> 35 </country> 36 </employee> 37 </employees>
employee.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> <head> <title>employees info</title> </head> <body> <xsl:apply-templates select="//employee"/> </body> </html> </xsl:template> <xsl:template match="employee"> <xsl:for-each select="."> <xsl:value-of select="name"/> <xsl:if test="age > 27"> -- <xsl:value-of select="age"/> </xsl:if> <br/> </xsl:for-each> </xsl:template> </xsl:stylesheet>
结果