• 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>

    结果

  • 相关阅读:
    numpy中linspace用法 (等差数列创建函数)
    Ubuntu环境下 matplotlib 图例中文乱码
    转载: 广义逆矩阵
    matplotlib.pyplot中add_subplot方法参数111的含义
    转载:(论文) 二次指数平滑法中确定初始值的简便方法
    图像处理之 opencv 学习---opencv 中的常用算法
    图像处理之 opencv 学习---矩阵的操作
    编译异常之static和extern---more than one storage class specified
    格式转换至yuv422转 yuv420
    阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_6 自定义类型转换器代码编写
  • 原文地址:https://www.cnblogs.com/microcat/p/10396034.html
Copyright © 2020-2023  润新知