xml+xsl的匹配

在xml这个 系列中
xml用来负责数据的存储。
xslt用来负责数据的修正,塞选和显示
这里我做一个简单的
xml+xsl的关联。
目的:使大家了解xml和xsl是怎么关联
并且影响数据显示的。

xml 和xsl的关联是通过
在xml文档中加入
xml-stylesheet处理指令
<?xml-stylesheet type=”text/xsl” href=”xxxx.xsl”?>
如下面的例子
XML File (prodsort.xml)

 

ContractedBlock.gifExpandedBlockStart.gif
None.gif<?xml version="1.0"?>
None.gif
<?xml-stylesheet type="text/xsl" href="prodsort.xsl" ?>
None.gif
<products>
None.gif    
<product prodID="AX5608">
None.gif        
<name>FooBar</name>
None.gif        
<version>1.5</version>
None.gif        
<descr>Processes foo objects using standard FB API</descr>
None.gif        
<categ>Software</categ>
None.gif        
<price curr="USD">149.99</price>
None.gif        
<units>each</units>
None.gif    
</product>
None.gif    
<product prodID="CB3241">
None.gif        
<name>TrixelMaker</name>
None.gif        
<version>3.0</version>
None.gif        
<descr>Burns multiple trixels from single master (requires Wooden Rings 1.6 or greater)</descr>
None.gif        
<categ>Hardware</categ>
None.gif        
<price curr="EU">178.49</price>
None.gif        
<units>each</units>
None.gif    
</product>
None.gif    
<product prodID="WD3241">
None.gif        
<name>Widgetry Magick</name>
None.gif        
<version>1.0</version>
None.gif        
<descr>Time-stamps Virtual Widgets</descr>
None.gif        
<categ>Software</categ>
None.gif        
<price curr="GBP">46.80</price>
None.gif        
<units>each</units>
None.gif    
</product>
None.gif    
<product prodID="WR9843">
None.gif        
<name>Wooden Rings Workbench</name>
None.gif        
<version>4.5</version>
None.gif        
<descr>Enhances WRWB 4.0 with "peel'n'play" capability</descr>
None.gif        
<categ>Craftware</categ>
None.gif        
<price curr="USD">129.95</price>
None.gif        
<units>each</units>
None.gif    
</product>
None.gif    
<product prodID="WR9840">
None.gif        
<name>Wooden Rings Workbench</name>
None.gif        
<version>4.0</version>
None.gif        
<descr>Applies Widgetry Magick timestamps to Wooden Rings 1.6 or greater</descr>
None.gif        
<categ>Craftware</categ>
None.gif        
<price curr="USD">109.95</price>
None.gif        
<units>each</units>
None.gif    
</product>
None.gif    
<product prodID="WR1016">
None.gif        
<name>Wooden Rings</name>
None.gif        
<version>1.6</version>
None.gif        
<descr>Our best-selling oaken toroids</descr>
None.gif        
<categ>Craftware</categ>
None.gif        
<price curr="USD">27.99</price>
None.gif        
<units>dozen</units>
None.gif    
</product>
None.gif    
<product prodID="WD">
None.gif        
<name>Virtual Widgets</name>
None.gif        
<version>3.5</version>
None.gif        
<descr>Logs critical events and properties over any object's lifetime</descr>
None.gif        
<categ>Middleware</categ>
None.gif        
<price curr="GBP">109.99</price>
None.gif        
<units>each</units>
None.gif    
</product>
None.gif
</products>
None.gif

XSLT File (prodsort.xsl)

 

 

ContractedBlock.gifExpandedBlockStart.gif
None.gif<?xml version="1.0"?>
None.gif
<xsl:stylesheet version="1.0"
None.gif   xmlns:xsl
="http://www.w3.org/1999/XSL/Transform"
None.gif   xmlns:msxsl
="urn:schemas-microsoft-com:xslt">
None.gif
None.gif
<xsl:template match="/">
None.gif   
<HTML>
None.gif      
<HEAD>
None.gif         
<TITLE>Wooden Rings and More!</TITLE>
None.gif         
<STYLE type="text/css">
None.gif            th {background-color: silver;
None.gif               font-family: Tahoma,Verdana,Arial,sans-serif}
None.gif            td {background-color: white;
None.gif               font-family: Tahoma,Verdana,Arial,sans-serif}
None.gif         
</STYLE>
None.gif      
</HEAD>
None.gif      
<BODY>
None.gif         
<xsl:apply-templates/>
None.gif      
</BODY>
None.gif   
</HTML>
None.gif
</xsl:template>
None.gif
None.gif
<xsl:template match="products">
None.gif   
<!-- Create a variable to hold the generated result tree fragment. -->
None.gif   
<xsl:variable name="prods_with_usd">
None.gif      
<xsl:apply-templates select="product" mode="calc_usd" />
None.gif   
</xsl:variable>
None.gif   
<TABLE width="75%">
None.gif      
<tr>
None.gif         
<th>Category</th>
None.gif         
<th>Prod ID</th>
None.gif         
<th>Name/Version</th>
None.gif         
<th>Description</th>
None.gif         
<th>Price (Currency)</th>
None.gif         
<th>Price (USD)</th>
None.gif      
</tr>
None.gif      
<!-- Fill remainder of table with source tree "clone". -->      
None.gif      
<xsl:apply-templates select="msxsl:node-set($prods_with_usd)/product">
None.gif         
<xsl:sort select="usd_equiv" data-type="number" />
None.gif      
</xsl:apply-templates>
None.gif   
</TABLE>
None.gif
</xsl:template>
None.gif
None.gif
<xsl:template match="product" mode="calc_usd">
None.gif   
<xsl:copy>
None.gif      
<xsl:copy-of select="@*" />
None.gif      
<xsl:copy-of select="*" />
None.gif      
<!-- Add a calculated <usd_equiv> child to each <product>. -->      
None.gif      
<xsl:element name="usd_equiv">
None.gif         
<xsl:choose>
None.gif            
<!-- Note: Exchange rates current as of Oct. 2000. -->
None.gif            
<xsl:when test="price/@curr='USD'">
None.gif               
<xsl:value-of select="format-number(price, '#,##0.00')"/>
None.gif            
</xsl:when>
None.gif            
<xsl:when test="price/@curr='GBP'">
None.gif               
<xsl:value-of select="format-number(price * 1.47275, '#,##0.00')"/>
None.gif            
</xsl:when>
None.gif            
<xsl:when test="price/@curr='EU'">
None.gif               
<xsl:value-of select="format-number(price * 0.864379, '#,##0.00')"/>
None.gif            
</xsl:when>
None.gif            
<xsl:otherwise>Unknown Currency</xsl:otherwise>
None.gif         
</xsl:choose>
None.gif      
</xsl:element>
None.gif   
</xsl:copy>
None.gif
</xsl:template>
None.gif
None.gif
<xsl:template match="product">
None.gif   
<tr>
None.gif      
<td valign="top">
None.gif         
<xsl:value-of select="categ"/>
None.gif      
</td>
None.gif      
<td valign="top">
None.gif         
<xsl:value-of select="@prodID"/>
None.gif      
</td>
None.gif      
<td valign="top">
None.gif         
<xsl:value-of select="concat(name, '/', version)"/>
None.gif      
</td>
None.gif      
<td valign="top">
None.gif         
<xsl:value-of select="descr"/>
None.gif      
</td>
None.gif      
<td valign="top" align="center">
None.gif         
<xsl:value-of select="concat(price, ' (', price/@curr, ')')"/>
None.gif      
</td>
None.gif      
<td valign="top" align="right">
None.gif         
<xsl:value-of select="usd_equiv"/>
None.gif      
</td>
None.gif   
</tr>
None.gif
</xsl:template>
None.gif
None.gif
</xsl:stylesheet>
None.gif

使用ie访问prodsort.xml文件。就看到最终解析后的结果

 

转载于:https://www.cnblogs.com/changmao99/archive/2007/03/22/684121.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值