📄 xsl.htm
字号:
]]></xsl:comment></font></span></p>
<p><span class="normal105"><font face="宋体" lang="ZH-CN">让我们给出另一个较为复杂的例子,并据此进一步学习XSL:</font></span></p>
<p><span class="normal105">Complex.xsl:</span></p>
<p align="JUSTIFY"></p>
<p><span class="normal105"><font face="宋体" lang="ZH-CN"><?xml version="1.0"?><br>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"><br>
<xsl:template match="/"><br>
<HTML><br>
<HEAD><br>
<STYLE><br>
BODY {margin:0}<br>
.bg {font:8pt Verdana; background-color:purple; color:white}<br>
H1 {font:bold 14pt Verdana; width:100%; margin-top:1em}<br>
.row {font:8pt Verdana; border-bottom:1px solid #CC88CC}<br>
.header {font:bold 9pt Verdana; cursor:hand; padding:2px; border:2px outset
gray}<br>
.up {background-color:#DDFFDD;}<br>
.down {background-color:#FFDDDD;}<br>
</STYLE><br>
</HEAD><br>
<br>
<SCRIPT><br>
<xsl:comment><![CDATA[<br>
function sort(field)<br>
{<br>
sortField.value = field;<br>
listing.innerHTML = source.documentElement.transformNode(stylesheet);<br>
}<br>
]]></xsl:comment><br>
</SCRIPT></font></span></p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"> <span class="normal105"><font face="宋体" lang="ZH-CN"><SCRIPT
for="window" event="onload"><br>
<xsl:comment><![CDATA[<br>
stylesheet = document.XSLDocument;<br>
source = document.XMLDocument;<br>
sortField = document.XSLDocument.selectSingleNode("//@order-by");<br>
]]></xsl:comment><br>
</SCRIPT></font></span></p>
<p align="JUSTIFY"> </p>
<p align="JUSTIFY"> <span class="normal105"><font face="宋体" lang="ZH-CN"><BODY><br>
<TABLE width="100%" cellspacing="0"><br>
<TR><br>
<TD class="bg"/><br>
<TD class="bg"><br>
<H1> <xsl:value-of select="portfolio/description"/> for <xsl:apply-templates
select="portfolio/date"/></H1><br>
<DIV>Average change: <B><xsl:eval>averageChange(this)</xsl:eval></B></DIV><br>
<DIV>Total volume: <B><xsl:eval>totalVolume(this)</xsl:eval></B></DIV><br>
</TD><br>
</TR><br>
<TR><br>
<TD class="bg" width="120" valign="top"><br>
<P>Click on the column headers to sort by that field.</P><br>
<P>Demonstration of custom formatting of data typed values and local
reapplication of the stylesheet.</P><br>
<P>Stocks losing more than 5% indicated in red. Stocks gaining value
indicated in green.</P><br>
</TD><br>
<TD class="bg" valign="top"><br>
<DIV id="listing"><xsl:apply-templates match="portfolio"/></DIV><br>
</TD><br>
</TR><br>
</TABLE> <br>
</font> <font face="宋体" lang="ZH-CN"></BODY><br>
</HTML><br>
</xsl:template></font></span></p>
<p align="JUSTIFY"> </p>
<p align="JUSTIFY"> <span class="normal105"><font face="宋体" lang="ZH-CN"><xsl:template
match="portfolio"><br>
<TABLE STYLE="background-color:white"><br>
<br>
<THEAD><br>
<TD width="200"><DIV class="header" onClick="sort('name')">Company</DIV></TD><br>
<TD width="80"><DIV class="header" onClick="sort('symbol')">Symbol</DIV></TD><br>
<TD width="80"><DIV class="header" onClick="sort('price')">Price</DIV></TD><br>
<TD width="80"><DIV class="header" onClick="sort('change')">Change</DIV></TD><br>
<TD width="80"><DIV class="header" onClick="sort('percent')">%Change</DIV></TD><br>
<TD width="80"><DIV class="header" onClick="sort('volume')">Volume</DIV></TD><br>
</THEAD></font></span></p>
<p align="JUSTIFY"> <span class="normal105"><font face="宋体" lang="ZH-CN"><xsl:for-each
select="stock" order-by="symbol"><br>
<TR><br>
<xsl:for-each select="change"><br>
<xsl:if expr="this.nodeTypedValue &gt; 0"><br>
<xsl:attribute name="class">up</xsl:attribute><br>
</xsl:if><br>
</xsl:for-each><br>
<br>
<xsl:for-each select="percent"><br>
<xsl:if expr="this.nodeTypedValue &lt; -5"><br>
<xsl:attribute name="class">down</xsl:attribute><br>
</xsl:if><br>
</xsl:for-each><br>
<TD><DIV class="row"><xsl:value-of select="name"/></DIV></TD><br>
<TD><DIV class="row"><xsl:value-of select="symbol"/></DIV></TD><br>
<TD><DIV class="row" STYLE="text-align:right"><xsl:apply-templates
select="price"/></DIV></TD><br>
<TD><DIV class="row" STYLE="text-align:right"><xsl:apply-templates
select="change"/></DIV></TD><br>
<TD><DIV class="row" STYLE="text-align:right"><xsl:apply-templates
select="percent"/></DIV></TD><br>
<TD><DIV class="row" STYLE="text-align:right"><xsl:apply-templates
select="volume"/></DIV></TD><br>
</TR><br>
</xsl:for-each><br>
<br>
</TABLE></font></span></p>
<p align="JUSTIFY"> <span class="normal105"><font face="宋体" lang="ZH-CN"></xsl:template></font></span></p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"> <span class="normal105"><font face="宋体" lang="ZH-CN"><xsl:template
match="date"><br>
<xsl:eval>formatDate(this.nodeTypedValue, "MMMM dd',' yyyy")</xsl:eval>
at <xsl:eval>formatTime(this.nodeTypedValue, "hh:mm tt")</xsl:eval><br>
</xsl:template></font></span></p>
<p align="JUSTIFY"> </p>
<p align="JUSTIFY"> <span class="normal105"><font face="宋体" lang="ZH-CN"><xsl:template
match="price | change"><br>
<xsl:eval>formatNumber(this.nodeTypedValue, "$0.00")</xsl:eval><br>
</xsl:template><br>
<xsl:template match="percent"><br>
<xsl:if expr="this.nodeTypedValue &gt; 0">+</xsl:if><br>
<xsl:eval>formatNumber(this.nodeTypedValue, "0.0")</xsl:eval>%<br>
</xsl:template></font></span></p>
<p align="JUSTIFY"> </p>
<p align="JUSTIFY"> <span class="normal105"><font face="宋体" lang="ZH-CN"><xsl:template
match="volume"><br>
<xsl:eval>formatNumber(this.nodeTypedValue * 1000000, "#,###,###")</xsl:eval><br>
</xsl:template><br>
<br>
<br>
<xsl:script><![CDATA[<br>
function totalVolume(node)<br>
{<br>
total = 0;<br>
volumes = node.selectNodes("/portfolio/stock/volume");<br>
for (v = volumes.nextNode(); v; v = volumes.nextNode())<br>
total += v.nodeTypedValue;<br>
return formatNumber(total, "#") + " million shares";<br>
}</font></span></p>
<p align="JUSTIFY"> </p>
<p align="JUSTIFY"><span class="normal105"><font face="宋体" lang="ZH-CN">
function averageChange(node)<br>
{<br>
total = 0;<br>
percents = node.selectNodes("/portfolio/stock/percent");<br>
count = percents.length;<br>
for (p = percents.nextNode(); p; p = percents.nextNode())<br>
total += p.nodeTypedValue;<br>
return formatNumber(total/count, "#.0") + "%";<br>
}</font></span></p>
<p align="JUSTIFY"><span class="normal105"><font face="宋体" lang="ZH-CN">
]]></xsl:script></font></span></p>
<p align="JUSTIFY"><span class="normal105"><font face="宋体" lang="ZH-CN"></xsl:stylesheet></font></span></p>
<p align="JUSTIFY"><span class="normal105">如果你要显示中文,你只要在XML和XSL文件的的开头分别加上:<?xml
version="1.0" encoding="gb2312"?>即可.试试看!</span></p>
<hr size="1">
<p align="center"><font face="宋体" lang="ZH-CN">[<a href="#top">返回标题</a>][<a href="../application.htm" tppabs="http://www.xml.org.cn:8188/application/application.htm" target="_parent">返回应用</a>][<a href="../../default.asp.htm" tppabs="http://www.xml.org.cn:8188/default.asp" target="_parent">返回首页</a>][<a href="mailto:xmlteam@egroups.com">欢迎投稿</a>]</font></p>
<p align="center">最后更新:1999年8月5日<br>
<font color="#FF0033" size="-1">本站点所刊文章版权,均归本站点所有。署名作者拥有其著作权。<br>
未经</font><font color="#FF0033"><a href="mailto:xmlteam@egroups.com"><font color="#6666FF" size="-1">允许</font></a></font><font color="#FF0033" size="-1">,不得随意转载,违者必究!!</font>
</p>
</td>
</tr>
</table>
<h2 ALIGN="CENTER"> </h2>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=3>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3></FONT>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -