XSLT中的换行符,用于逗号分隔值

时间:2011-02-25 19:10:22

标签: xslt

我是XSLT的新手,我正在尝试以下方法:

我有以下内容:

<TR> <TD> Name: </TD> <TD><xsl:value-of select="ZNAME"/> </TD> </TR>

返回

ADAM,BRIAN,CHARLIE,DAVID

我如何能够回报:

ADAM
BRIAN
CHARLIE
DAVID

请建议。

2 个答案:

答案 0 :(得分:0)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="ZNAME" name="tokenize">
  <xsl:param name="pText" select="concat(., ',')"/>

  <xsl:if test="string-length($pText)>0">
   <xsl:value-of select="substring-before($pText, ',')"/>
   <br />
   <xsl:call-template name="tokenize">
    <xsl:with-param name="pText"
     select="substring-after($pText, ',')"/>
   </xsl:call-template>
  </xsl:if>
 </xsl:template>
</xsl:stylesheet>

应用于此XML文档时:

<ZNAME>ADAM,BRIAN,CHARLIE,DAVID</ZNAME>

会产生想要的正确结果:

ADAM<br/>BRIAN<br/>CHARLIE<br/>DAVID<br/>

which when viewed in a browser is displayed like:

ADAM
BRIAN
CHARLIE
DAVID

答案 1 :(得分:0)

如果您需要一个不输出尾随<br/>元素的解决方案,请尝试以下方法:

<TR> <TD> Name: </TD> <TD><xsl:apply-templates select="ZNAME"/> </TD> </TR>

<xsl:template match="ZNAME" name="convertcommas">
  <xsl:param name="text" select="."/>
  <xsl:value-of select="substring-before(concat($text,','),',')" />
  <xsl:if test="contains($text,',')">
    <br />
    <xsl:call-template name="convertcommas">
      <xsl:with-param name="text" select="substring-after($text,',')" />
    </xsl:call-template>
  </xsl:if>
</xsl:template>

concat($text,',')确保substring-before至少看到一个逗号,如果原来没有逗号,则自动输出字符串。