>데이터 베이스 >MySQL 튜토리얼 >xml/xsl(2): 将XML/XSL写到一个文件

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-06-07 15:15:031071검색

这被称为数据和显示式分离,这非常好,当我们想要改变风,主要换一个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>


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.