六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 130|回复: 0

xsl生成html文档2

[复制链接]

升级  64%

8

主题

8

主题

8

主题

童生

Rank: 1

积分
32
 楼主| 发表于 2013-2-7 19:45:05 | 显示全部楼层 |阅读模式
继续之前的《xsl生成html文档1》的 内容
 
 <xsl:template> 元素用于构建模板。
match 属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档)。
<xsl:template> 元素内部的内容定义了写到输出结果的 HTML 代码。
 
<xsl:value-of> 元素用于提取某个选定节点的值,并把值添加到转换的输出流中:
注释:select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。
 
如果<xsl:value-of>里面有多个匹配,则返回第一个结果。例如上例的代码,只取到了
 

姓名分数年龄邮箱省份城市张三8520zhangsan@126.com广东广州 
 
<xsl:for-each> 元素可用于选取指定的节点集中的每个 XML 元素。
select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。
 
 
如果将student.xsl文件该为如下,取得所有学生的信息并且输出。 
 
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/students"> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>学生列表</title> </head> <body>   <table border="1">     <tr>     <th>姓名</th>      <th>分数</th>      <th>年龄</th>      <th>邮箱</th>      <th>省份城市</th>     </tr>     <xsl:for-each select="student">     <tr>     <th><xsl:value-of select="name"/></th>      <th><xsl:value-of select="score"/></th>      <th><xsl:value-of select="age"/></th>      <th><xsl:value-of select="email"/></th>      <th><xsl:value-of select="address/province"/><xsl:value-of select="address/city"/></th>     </tr>     </xsl:for-each>   </table> </body> </html></xsl:template></xsl:stylesheet> 
可以看到结果
姓名分数年龄邮箱省份城市张三8520zhangsan@126.com广东广州李四7924lisi@126.com广东深圳王五9224wangwu@126.com广东汕头
 
结果过滤

通过在 <xsl:for-each> 元素中添加一个选择属性的判别式,我们也可以过滤从 XML 文件输出的结果。
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
合法的过滤运算符:
·  =  (等于)
·  != (不等于)
·  < (小于)
·  > (大于)
 
 如果要查询成绩学生的id小于1003的学生的信息,只要将上边的
<xsl:for-each select="student">
改为<xsl:for-each select="student[@id < 1003]"> 即可实现
 
<xsl:sort> 元素用于对结果进行排序。
如需对结果进行排序,只要简单地在 XSL 文件中的 <xsl:for-each> 元素内部添加一个 <xsl:sort> 元素:
例如对学生按照成绩由高到低排序:
<xsl:for-each select="student">
    <xsl:sort select="score"/>
      <tr>
       <th><xsl:value-of select="name"/></th>
       <th><xsl:value-of select="score"/></th>
       <th><xsl:value-of select="age"/></th>
       <th><xsl:value-of select="email"/></th>
       <th><xsl:value-of select="address/province"/><xsl:value-of select="address/city"/></th>
      </tr>
     </xsl:for-each>
 
 
<xsl:if> 元素

如需放置针对 XML 文件内容的条件测试,请向 XSL 文档添加 <xsl:if> 元素。
在何处放置 <xsl:if> 元素

如需添加有条件的测试,请在 XSL 文件中的 <xsl:for-each> 元素内部添加 <xsl:if> 元素:
 查询分数大于90分的学生信息。
   <xsl:for-each select="student">
     <xsl:if test="score > 90">
      <tr>
       <th><xsl:value-of select="name"/></th>
       <th><xsl:value-of select="score"/></th>
       <th><xsl:value-of select="age"/></th>
       <th><xsl:value-of select="email"/></th>
       <th><xsl:value-of select="address/province"/><xsl:value-of select="address/city"/></th>
      </tr>
      </xsl:if>
     </xsl:for-each>
 
如果<xsl:if>元素不放在<xsl:for-each>元素内部,则对于test中的内容,如果整个文档中有一个符合,则<xsl:if>里面的内容会被执行。
      <xsl:if test="student/score > 90">
      <tr>
       <th><xsl:value-of select="student/name"/></th>
       <th><xsl:value-of select="student/score"/></th>
       <th><xsl:value-of select="student/age"/></th>
       <th><xsl:value-of select="student/email"/></th>
       <th><xsl:value-of select="student/address/province"/><xsl:value-of select="address/city"/></th>
      </tr>
      </xsl:if>
 
 
以上得到的结果为: 

 
 

 
 

 
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/students"> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>学生列表</title> </head> <body>   <table border="1">     <tr>     <th>姓名</th>      <th>分数</th>      <th>年龄</th>      <th>邮箱</th>      <th>省份城市</th>     </tr>     <xsl:for-each select="student">     <xsl:choose>     <xsl:when test="score > 90">     <tr bgcolor="#0055aa">     <th><xsl:value-of select="name"/></th>      <th><xsl:value-of select="score"/></th>      <th><xsl:value-of select="age"/></th>      <th><xsl:value-of select="email"/></th>      <th><xsl:value-of select="address/province"/><xsl:value-of select="address/city"/></th>     </tr>     </xsl:when>     <xsl:when test="score > 80">     <tr bgcolor="#aa0000">     <th><xsl:value-of select="name"/></th>      <th><xsl:value-of select="score"/></th>      <th><xsl:value-of select="age"/></th>      <th><xsl:value-of select="email"/></th>      <th><xsl:value-of select="address/province"/><xsl:value-of select="address/city"/></th>     </tr>     </xsl:when><xsl:otherwise><tr>     <th><xsl:value-of select="name"/></th>      <th><xsl:value-of select="score"/></th>      <th><xsl:value-of select="age"/></th>      <th><xsl:value-of select="email"/></th>      <th><xsl:value-of select="address/province"/><xsl:value-of select="address/city"/></th>     </tr></xsl:otherwise></xsl:choose></xsl:for-each>   </table> </body> </html></xsl:template></xsl:stylesheet> 
可以得到结果 
 

姓名分数年龄邮箱省份城市张三8520zhangsan@126.com广东广州李四7924lisi@126.com广东深圳王五9224wangwu@126.com广东汕头
  
<xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。
<xsl:apply-templates> 元素

<xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。
假如我们向 <xsl:apply-templates> 元素添加一个 select 属性,此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序。
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/students"> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>学生列表</title> </head> <body>  <table border="1">  <tr><th>姓名</th><th>分数</th><th>年龄</th><th>邮箱</th><th>省份城市</th></tr>   <xsl:apply-templates/>   </table> </body> </html></xsl:template><xsl:template match="student"><tr><xsl:apply-templates select="name"/><xsl:apply-templates select="score"/><xsl:apply-templates select="age"/><xsl:apply-templates select="email"/><xsl:apply-templates select="address"/></tr></xsl:template><xsl:template match="name"><td><xsl:value-of select="."/></td></xsl:template><xsl:template match="score"><td><xsl:value-of select="."/></td></xsl:template><xsl:template match="age"><td><xsl:value-of select="."/></td></xsl:template><xsl:template match="email"><td><xsl:value-of select="."/></td></xsl:template><xsl:template match="address"><td><xsl:value-of select="province"/><xsl:value-of select="city"/></td></xsl:template></xsl:stylesheet> 
将student.xsl文件改为上面的,同样可以查看所有的学生信息。
得到的html代码如下:
 
<?xml version="1.0" encoding="UTF-8"?><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>学生列表</title></head><body><table border="1"><tr><th>姓名</th><th>分数</th><th>年龄</th><th>邮箱</th><th>省份城市</th></tr><tr><td>张三</td><td>85</td><td>20</td><td>zhangsan@126.com</td><td>广东广州</td></tr><tr><td>李四</td><td>79</td><td>24</td><td>lisi@126.com</td><td>广东深圳</td></tr><tr><td>王五</td><td>92</td><td>24</td><td>wangwu@126.com</td><td>广东汕头</td></tr></table></body></html> 
相关的信息参考自w3school的xslt教程 http://www.w3school.com.cn/xsl/index.asp

 

 

 

 

 

 

 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表