Maison >base de données >tutoriel mysql >xml/xsl(2): 将XML/XSL写到一个文件
这被称为数据和显示式分离,这非常好,当我们想要改变风,主要换一个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>