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.gif ExpandedBlockStart.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.gif ExpandedBlockStart.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FILTERXML 函数是 Excel 中的一个功能强大的函数,它可以通过使用 XSL 过滤器来过滤 XML 数据。 它的语法如下: FILTERXML(xml, xpath) 其中,参数 xml 是一个包含 XML 数据的单元格的引用,xpath 是一个用于筛选数据的 XPath 表达式。 例如,假设我们有一个包含如下 XML 数据的单元格 A1: ``` <employees> <employee> <name>John</name> <title>Manager</title> </employee> <employee> <name>Jane</name> <title>Developer</title> </employee> <employee> <name>Bob</name> <title>Designer</title> </employee> </employees> ``` 我们可以使用 FILTERXML 函数来筛选出所有任职经理的员工,如下所示: ``` =FILTERXML(A1, "//employee[title='Manager']") ``` 这将返回一个新的 XML 对象,其中包含名为 John 的员工信息。 希望这个回答能帮到您! ### 回答2: Excel的FILTERXML函数是一种用于从XML字符串中提取数据的功能。 FILTERXML函数的语法为:FILTERXML(xml, xpath) 其中,xml是要提取数据的XML字符串,xpath是要提取的节点路径。 FILTERXML函数可以用于提取XML中的各种信息,比如节点值、属性值等。 例如,我们有以下XML字符串: <bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J.K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore> 如果我们想要提取所有book节点的title值,我们可以使用FILTERXML函数: =FILTERXML(A1, "//title") 其中,A1是包含XML字符串的单元格,"//title"是XPath表达式,表示提取所有名为"title"的节点。 运行函数后,我们会得到一个垂直的数据列表,列出了所有book节点的title值。 FILTERXML函数在处理大型XML数据时非常有用,可以方便地提取所需信息,而不必手动解析XML字符串。因此,FILTERXML函数在Excel数据处理和分析中非常实用。 ### 回答3: FILTERXML函数是Excel中的一种函数,用于处理XML数据。 XML是一种标记语言,用于描述和表示数据。FILTERXML函数可以以以下两种方式使用: 第一种方式是通过指定XPath表达式和XML字符串来提取特定的数据。XPath是一种用于在XML文档中定位和选择节点的语言。FILTERXML函数会根据XPath表达式在给定的XML字符串中查找匹配的节点,并返回结果。 例如,如果我们有一个包含以下内容的XML字符串: <students> <student> <name>John</name> <age>20</age> </student> <student> <name>Jane</name> <age>22</age> </student> </students> 我们可以使用FILTERXML函数提取出所有学生的姓名: =FILTERXML("xml字符串","//name") 这样,函数将返回一个数组 {"John","Jane"}。 第二种方式是通过指定XPath表达式和XML文件路径来提取数据。这种方式与第一种方式类似,只是需要将文件路径作为第一个参数提供给FILTERXML函数。 总的来说,FILTERXML函数是一个强大的函数,可以在Excel中处理和提取XML数据,方便我们对XML数据进行分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值