用XSL表现你的XML

我们已经知道,XML文件用来存放数据,而如何表现XML则要借助其他的手段。我们现在推荐您使用IE5.0。如果您在IE5.0中直接打开 一个XML文件,那么你看到的只是XML的源代码;要进一步以更灵活更丰富的形式来表示,就要借助于CSS或XSL。如何使用CSS,建议阅读CSS2规范(W3C建议) . 这里我们想介绍如何用XSL来表现您的XML. 首先我们给出一个XML文件(stock-sorter.xml)的简单例子: Technology Stock Index 1999-08-13T15:56:00 AOL america online inc 92.250 -1.125 -1.20 4.99 CSCO cisco sys inc 50.688 -1.688 -3.22 18.23 DELL dell computer corp 53.000 -3.063 -5.46 32.95 ...... 其中元素portfolio是在portfolio文件中定义的: 在stock-sorter.xml文件中第一行的处理指令(Process Instruction): 表示由simple.xsl来规定XML的表现方式。当我们在IE中打开该XML时,浏览器根据其中所规定的XSL的位置去得到该XSL,并通过XSL 处理器将XML和XSL结合成为XSL定义的输出形式。这里我们将其输出形式定为HTML格式,是为了方便在浏览器中直接显示。好,让我们来看简单的XSL文件是怎样写的: Simple.xsl:
-
(change: )
以上的代码很容易理解,关键是采用选择语句(for-each select)在XML树结构中进行选择,并把得到的结果树(Result Tree)包容于HTML中(value-of select).其实这只是简单的XSL语句.XSL的脚本语言叫做ECMAScript,它是在JavaScript的基础上发展的。如果我们要改变stock-sorter.xml的表现,只要在stlye sheet的href中指定另外的XSL文件。 在XSL的规范定义了XML的匹配模板(Template),设置匹配字符,则处理时将从XML的根节点(Root Node)搜索匹配的节点.如: .通常构成HTML格式的模板,它可以只是XSL的一部分。您还可以写XSL的脚本,举个示例: function Demo(node) { total = 0; volumes = node.selectNodes("/portfolio/stock/volume"); for (v = volumes.nextNode(); v; v = volumes.nextNode()) total += v.nodeTypedValue; return formatNumber(total, "#") + " million shares"; } 还可以加XSL的注释,如: function sort(field) { sortField.value = field; listing.innerHTML = source.documentElement.transformNode(stylesheet); } 让我们给出另一个较为复杂的例子,并据此进一步学习XSL: Complex.xsl:

for

Average change: averageChange(this)
Total volume: totalVolume(this)

Click on the column headers to sort by that field.

Demonstration of custom formatting of data typed values and local reapplication of the stylesheet.

Stocks losing more than 5% indicated in red. Stocks gaining value indicated in green.

up down
Company
Symbol
Price
Change
%Change
Volume
formatDate(this.nodeTypedValue, "MMMM dd',' yyyy") at formatTime(this.nodeTypedValue, "hh:mm tt") formatNumber(this.nodeTypedValue, "$0.00") + formatNumber(this.nodeTypedValue, "0.0") % formatNumber(this.nodeTypedValue * 1000000, "#,###,###") function totalVolume(node) { total = 0; volumes = node.selectNodes("/portfolio/stock/volume"); for (v = volumes.nextNode(); v; v = volumes.nextNode()) total += v.nodeTypedValue; return formatNumber(total, "#") + " million shares"; } function averageChange(node) { total = 0; percents = node.selectNodes("/portfolio/stock/percent"); count = percents.length; for (p = percents.nextNode(); p; p = percents.nextNode()) total += p.nodeTypedValue; return formatNumber(total/count, "#.0") + "%"; }
如果你要显示中文,你只要在XML和XSL文件的的开头分别加上: 即可.试试看!

你可能感兴趣的:(xml)