xslt模板应用

本文介绍XSLUtil工具类,用于实现XML到指定格式的快速转换。文章详细讲解了XSLT模版规则,包括如何选取数据、逻辑判断、排序等操作,并提供了示例说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值