2011-02-25 53 views
1

我是新来的XSLT,我尝试以下:换行符在XSLT为逗号分隔值

我有以下几点:

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

返回

ADAM,BRIAN,CHARLIE,DAVID 

如何我可以做出这样的回报:

ADAM 
BRIAN 
CHARLIE 
DAVID 

请建议。

+1

如果你有这个输入' ADAM,BRIAN,CHARLIE,DAVID',你正在寻找标记。这将是一个副本http://stackoverflow.com/questions/136500/does-xslt-have-a-split-function – 2011-02-25 19:16:10

+0

@Ajjandro - 你应该添加,作为一个答案,所以你可以得到一个正确的upvote。 @Portal Admin - 就像Alejandro说的那样,标记化是要走的路。但是,如果您需要在其他情况下在输出中添加文字中断,请尝试使用类似“ ”的文字。 – 2011-02-25 20:54:11

+0

@DevNull:请注意'translate(ZNAME,',',' ')'也可以正确回答这个问题**。 – 2011-02-25 21:21:59

回答

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

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看到至少一个逗号,如果最初没有逗号,就会自行输出字符串。