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中合理添加简单逻辑。
= (等于)
!= (不等于)
< (小于)
> (大于)
<xsl:for-each select="catalog/cd">
<xsl:if test="price > 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 > 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:when test="price > 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>
结果排序,就是对一个数组型的数据对某个特定字段排序
[color=red]4.补充
怎么来判断元素endDate是否存在?
<xsl:if test="message/data/bus/endDate">
元素endDate存在
</xsl:if >[/color]
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中合理添加简单逻辑。
= (等于)
!= (不等于)
< (小于)
> (大于)
<xsl:for-each select="catalog/cd">
<xsl:if test="price > 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 > 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:when test="price > 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>
结果排序,就是对一个数组型的数据对某个特定字段排序
[color=red]4.补充
怎么来判断元素endDate是否存在?
<xsl:if test="message/data/bus/endDate">
元素endDate存在
</xsl:if >[/color]