XML--XSL

参考

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 &gt; 27">
            -- <xsl:value-of select="age"/>
        </xsl:if>
        <br/>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

结果

 

posted @ 2019-02-18 15:51  MicroCat  阅读(268)  评论(0编辑  收藏  举报