首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

xslt模板施用

2012-09-19 
xslt模板应用1.类介绍XslUtil.java 为主要工具类,提供由xml转换成用户期望xml格式的功能,其中public stati

xslt模板应用
1.类介绍
XslUtil.java 为主要工具类,提供由xml转换成用户期望xml格式的功能,其中
public static String transformXml(String xslPath,String xml) throws Exception
方法提供此功能,只需传入xsl(xml转换规则模版)的路径和需要转换的xml字符串即可。

StringInputStream.java
StringOutputStream.java
这两个类主要是通过将字符串和数据流在内存中转换,减少IO读写,提高整体程序速度,因为XSL本身非常占用CPU资源和内存资源,因此优化代码十分必要。
2.代码效率
现在的代码,速度可达到100个/秒,如遇到效率问题,可能是其他方面的问题,或是考虑增加服务器。
3.xsl模版规则介绍
<xsl:value-of select="catalog/cd/title"/>
这种方式主要是直接从源xml中获取数据,其中catalog/cd/title这种类似与目录的结构就是源xml中的层次或者父子结构,也就是下面的”test data”数据。
<catalog>
<cd>
<title>
Test data
</title>
</cd>
</catalog>


<xsl:for-each select="catalog/cd">
      <tr>
        <td><xsl:value-of select="title"/></td>
        <td><xsl:value-of select="artist"/></td>
      </tr>
      </xsl:for-each>
源XML中有多个重复标签时,使用for-each可以循环赋值。
例如
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
</catalog>

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
   <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
   </tr>
   </xsl:for-each>
在select中合理添加简单逻辑。
=? (等于)
!= (不等于)
&lt; (小于)
&gt; (大于)

<xsl:for-each select="catalog/cd">
      <xsl:if test="price &gt; 10">
        <tr>
          <td><xsl:value-of select="title"/></td>
          <td><xsl:value-of select="artist"/></td>
        </tr>
      </xsl:if>
      </xsl:for-each>
If判断,可以在循环或是选取数据时添加if判断。Test是cd下面的一个节点。但是注意,这种if没有else的。下面会介绍一种可以当作if else的标签。
<xsl:choose>
          <xsl:when test="price &gt; 10">
            <td bgcolor="#ff00ff">
            <xsl:value-of select="artist"/></td>
          </xsl:when>
          <xsl:when test="price &gt; 9">
            <td bgcolor="#cccccc">
            <xsl:value-of select="artist"/></td>
          </xsl:when>
          <xsl:otherwise>
            <td><xsl:value-of select="artist"/></td>
          </xsl:otherwise>
        </xsl:choose>
Choose就跟if else一样,只不过是用when otherwise。

<xsl:for-each select="catalog/cd">
      <xsl:sort select="artist"/>
      <tr>
        <td><xsl:value-of select="title"/></td>
        <td><xsl:value-of select="artist"/></td>
      </tr>
      </xsl:for-each>
结果排序,就是对一个数组型的数据对某个特定字段排序

4.补充
怎么来判断元素endDate是否存在?

<xsl:if test="message/data/bus/endDate">
   元素endDate存在
</xsl:if >

热点排行