Home >Database >Mysql Tutorial >xml/xsl(2): 将XML/XSL写到一个文件

xml/xsl(2): 将XML/XSL写到一个文件

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 15:15:031069browse

这被称为数据和显示式分离,这非常好,当我们想要改变风,主要换一个XSL就行了,并不需要重新添加一份数据。 但是有的时候也是有特例的,比如我们就有这个奇怪的需求---将XML/XSL写到一个文件。百度后,没有结果;忽然灵机一动,不是有一个很热门的问答网站


这被称为数据和显示格式分离,这非常好,当我们想要改变风格,主要换一个XSL就行了,并不需要重新添加一份数据。


但是有的时候也是有特例的,比如我们就有这个奇怪的需求---将XML/XSL写到一个文件。百度后,没有结果;忽然灵机一动,不是有一个很热门的问答网站(stackoverflow)吗!


我就去搜索了一下,果然有个仁兄给出了一个很NICE的答案。我先列出来,后面有时间写个自己修改后的版本。

地址:http://stackoverflow.com/questions/9523174/embed-xsl-in-xml-for-display-in-web-browser-what-am-i-doing-wrong/9530410


<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="#stylesheet"?>


]>
<doc>
 <!--Start XSL-->
 <stylesheet id="stylesheet" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <template match="xsl:stylesheet"></template>

   <!--Variables-->
   <variable name="a" select="/doc/list/movie/seen[@value ='Yes']"></variable>
   <variable name="b" select="/doc/list/movie/seen"></variable>
   <variable name="c" select="sum(/doc/list/movie/rating/@value)"></variable>
   <variable name="d" select="$c div count($a)"></variable>
   <variable name="e" select="count($a) div count($b)"></variable>
   <variable name="f" select="/doc/list/movie/seen[@value ='No']"></variable>
   <variable name="g" select="/doc/list/movie/seen[@value ='Prior']"></variable>
   <variable name="h" select="count($f) div count($b)"></variable>
   <variable name="j" select="count($g) div count($b)"></variable>
   <variable name="minutes_total" select="sum(/doc/list/movie/length[@value ='y'])"></variable>
   <variable name="minutes" select="$minutes_total mod 60"></variable>
   <variable name="hours" select="floor($minutes_total div 60) mod 24"></variable>
   <variable name="hours2" select="floor($minutes_total div 60)"></variable>
   <variable name="days" select="floor($hours2 div 24)"></variable>
   <!--End Variables-->

  <decimal-format name="percent"></decimal-format>
  <decimal-format name="average" decimal-separator="."></decimal-format>

  <template match="/doc">
   
    
     <style>
      h2{
      font-family: Courier, Courier New, monospace;
      font-size: 32px;
      text-decoration: underline;
      }
      body{
      font-family: Courier New, monospace;
      }
      p{
      font-size: 16px;
      }
      table{
      font-size: 14px;
      }
      .title{
      text-align:left;
      }
      .release{
      text-align:center;
      }
      .seen{
      text-align:center;
      }
      .rating{
      text-align:right;
      }
      .length{
      text-align:center;
      }
     </style>
    
    
     <h2>My Movie List</h2>
     <p>Movies seen so far: <value-of select="count($a)"></value-of>/<value-of select="count($b)"></value-of> = <value-of select="format-number($e, '#%', 'percent')"></value-of><br>
     Movies yet to see: <value-of select="count($f)"></value-of>/<value-of select="count($b)"></value-of> = <value-of select="format-number($h, '#%', 'percent')"></value-of><br>
     Movies seen prior to making list: <value-of select="count($g)"></value-of>/<value-of select="count($b)"></value-of> = <value-of select="format-number($j, '#%', 'percent')"></value-of><br>
     Total time watched: <value-of select="format-number($days, '#0')"></value-of> days, <value-of select="format-number($hours, '#0')"></value-of> hours, <value-of select="format-number($minutes, '#0')"></value-of> minutes<br>
     Average rating:  <value-of select="format-number($d, '#.000', 'average')"></value-of> stars out of 5</p>
     <br>
     <table border="1">
      <tr>
       <th>#</th>
       <th>Title</th>
       <th>Release Date</th>
       <th>Length</th>
       <th>Seen</th>
       <th>Rating</th>
      </tr>
      <for-each select="list/movie">
       <choose>
        <when test="'seen">
         <tr style="background-color:#666; color:#fff">
          <td> <number></number>
</td>
          <td class="title"><value-of select="title"></value-of></td>
          <td class="release"><value-of select="release"></value-of></td>
          <td class="length">
<value-of select="length"></value-of> minutes</td>
          <td class="seen"><value-of select="seen"></value-of></td>
          <td class="rating"><value-of select="rating"></value-of></td>
         </tr>
        </when>
        <when test="'seen" prior to making list>
         <tr style="background-color:#999; color:#000">
          <td> <number></number>
</td>
          <td class="title"><value-of select="title"></value-of></td>
          <td class="release"><value-of select="release"></value-of></td>
          <td class="length">
<value-of select="length"></value-of> minutes</td>
          <td class="seen"><value-of select="seen"></value-of></td>
          <td class="rating"><value-of select="rating"></value-of></td>
         </tr>
        </when>
        <otherwise>
         <tr style="background-color:#fff;">
          <td> <number></number>
</td>
          <td class="title"><value-of select="title"></value-of></td>
          <td class="release"><value-of select="release"></value-of></td>
          <td class="length">
<value-of select="length"></value-of> minutes</td>
          <td class="seen"><value-of select="seen"></value-of></td>
          <td class="rating"><value-of select="rating"></value-of></td>
         </tr>
        </otherwise>
       </choose>
      </for-each>
     </table>
    
   
  </template>
 </stylesheet>

 <!--Start XML-->
 <list>
  <movie>
   <title>2001: A Space Odyssey</title>
   <release>1968</release>
   <seen value="No">No</seen>
   <rating>N/A</rating>
   <length value="n">141</length>
  </movie>
  <movie>
   <title>28 Days Later</title>
   <release>2002</release>
   <seen value="No">No</seen>
   <rating>N/A</rating>
   <length value="n">113</length>
  </movie>
  <movie>
   <title>28 Weeks Later</title>
   <release>2007</release>
   <seen value="No">No</seen>
   <rating>N/A</rating>
   <length value="n">100</length>
  </movie>
  <movie>
   <title>A Clockwork Orange</title>
   <release>1971</release>
   <seen value="Yes">Yes</seen>
   <rating value="2">☆☆☆★★</rating>
   <length value="y">136</length>
  </movie>
  <!--Rest of XML-->
 </list>
</doc>


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn