<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test2.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Use xlst to dealwith xml</artist>
<country>US<br/>A</country>
<company>test1,test2,test3</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
弄了几天的xslt,就是为了显现可以再一行当中按照指定的分隔符进行换行,也可能是缺乏这方面的经验,不过总算是把想要的效果搞出来了,为了庆祝,特意写了blog记录这一心酸的历程:
要求是把cd这个item用表格的形式显示出来,其中company这一栏如果只有一个值则正常显示,如果有多个值且用','分割,则要求在company那一列里面的数据换行分别显示,xlst的代码如下:
<?xml version="1.0" encoding="gb2312"?><!-- DWXMLSource="../../My Documents/test.xml" -->
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp " ">
<!ENTITY copy "©">
<!ENTITY reg "®">
<!ENTITY trade "™">
<!ENTITY mdash "—">
<!ENTITY ldquo "“">
<!ENTITY rdquo "”">
<!ENTITY pound "£">
<!ENTITY yen "¥">
<!ENTITY euro "€">
]>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="gb2312" />
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th width="49" align="left">Title</th>
<th width="56" align="left">Artist</th>
<th width="63" align="left">country</th>
<th width="56" align="left">company</th>
<th width="49" align="left">price</th>
<th width="79" align="left">year</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td>
<xsl:value-of select="title" />
</td>
<td>
<xsl:value-of select="artist" />
</td>
<td>
<xsl:value-of select="country" />
</td>
<td>
<xsl:variable name="service_result" select="company" />
<xsl:if test="contains($service_result,',')">
<xsl:call-template name="Split">
<xsl:with-param name="InputData" select="$service_result" />
</xsl:call-template>
</xsl:if>
<xsl:if test="not(contains(company,','))">
<xsl:value-of select="company" />
</xsl:if>
</td>
<td>
<xsl:value-of select="price" />
</td>
<td>
<xsl:value-of select="year" />
<br />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
<xsl:template name="Split">
<xsl:param name="InputData" />
<xsl:variable name="spliter">,</xsl:variable>
<xsl:variable name="NormalizedData"
select="concat(normalize-space($InputData), $spliter)" />
<xsl:variable name="leftString"
select="substring-before($NormalizedData, $spliter)" />
<xsl:variable name="remainedString"
select="substring-after($NormalizedData, $spliter)" />
<xsl:value-of select="$leftString" /><br/>
<xsl:if test="substring-before($remainedString, $spliter) != ''">
<xsl:call-template name="Split">
<xsl:with-param name="InputData" select="$remainedString" />
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
显示的效果如下:
东西很简单,可以比较烦,希望能给用得着的朋友做个参考!