利用xslt对xml中数据实现splite换行的总结

<?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>

显示的效果如下:


东西很简单,可以比较烦,希望能给用得着的朋友做个参考!



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值