xsl生成html文档

最近需要将xml的数据提取出来转化为xml,因此上网找资料搜索了一番,也学到了很多。现将学习时写的代码和文件发上来,记录记录,以备忘。

首先贴一下xml文件的代码。

 

 

 

接写来贴将xsl文件转化为html的java类。

 

   

一个简单的xsl模版文件,生成html。

 

 

这里转换得到的结果为:

姓名分数年龄邮箱省份城市
张三8520zhangsan@126.com广东广州

 

 

<xsl:value-of>如果不是在<xsl:for-each>里面,它只会匹配并且输出第一个符合select要求的元素。因而这里输出的是张三。

 

 

<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文件该为如下,取得所有学生的信息并且输出。 

 

可以看到结果

姓名分数年龄邮箱省份城市
张三8520zhangsan@126.com广东广州
李四7924lisi@126.com广东深圳
王五9224wangwu@126.com广东汕头

结果过滤

通过在 <xsl:for-each> 元素中添加一个选择属性的判别式,我们也可以过滤从 XML 文件输出的结果。

 

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">

 

合法的过滤运算符:

·  =  (等于)

·  != (不等于)

·  &lt; (小于)

·  &gt; (大于)

 

 

如果要查询成绩学生的id小于1003的学生的信息,只要将上边的

<xsl:for-each select="student">

改为<xsl:for-each select="student[@id &lt; 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 &gt; 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 &gt; 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>

 

 以上得到的结果为: 

姓名分数年龄邮箱省份城市
张三8520zhangsan@126.com广东

 

为什么得到的会是张三,明明他的分数只有85分,很多人可能都有这样的疑问。因为循环整个上下文,发现student/score &gt; 90成立,因为王五的成绩为92。所以<xsl:if>里面的内容会被执行。而根据最前面讲的,<xsl:value-of>如果不是在<xsl:for-each>里面,它只会匹配并且输出第一个符合select要求的元素。因而这里输出的是张三。

 

 

 

<xsl:choose> 元素

语法

 

<xsl:choose>

  <xsl:when test="expression">

    ... 输出 ...

  </xsl:when>

  <xsl:otherwise>

    ... 输出 ....

  </xsl:otherwise>

</xsl:choose>

 

在何处放置选择条件

要插入针对 XML 文件的多重条件测试,请向 XSL 文件添加 <xsl:choose><xsl:when> 以及 <xsl:otherwise>

将大于90分的学生用一种颜色显示,大于80分小于等于90分用另一种颜色显示。

 

 

可以得到结果 

 

姓名分数年龄邮箱省份城市
张三8520zhangsan@126.com广东广州
李四7924lisi@126.com广东深圳
王五9224wangwu@126.com广东汕头

  

 

<xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。

<xsl:apply-templates> 元素

<xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。

假如我们向 <xsl:apply-templates> 元素添加一个 select 属性,此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序。

  

 

将student.xsl文件改为上面的,同样可以查看所有的学生信息。

得到的html代码如下:

 

 

 

 

相关的信息参考自w3school的xslt教程 http://www.w3school.com.cn/xsl/index.asp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值