契约——XML + XSL

前端之家收集整理的这篇文章主要介绍了契约——XML + XSL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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 &lt; 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浏览器打开的)

查看源文件的时候会看到结果显示的还是上面是xml文件


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 &amp; xsl:when &amp; 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 &lt; 2.2">
            <td bgcolor="#20ff20">
            <xsl:value-of select="Weight"/></td>
          </xsl:when>
          <xsl:when test="Weight &gt; 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 &amp; 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>

浏览器打开结果:

猜你在找的XML相关文章