1
我是新来的XSLT,我尝试以下:换行符在XSLT为逗号分隔值
我有以下几点:
<TR> <TD> Name: </TD> <TD><xsl:value-of select="ZNAME"/> </TD> </TR>
返回
ADAM,BRIAN,CHARLIE,DAVID
如何我可以做出这样的回报:
ADAM
BRIAN
CHARLIE
DAVID
请建议。
我是新来的XSLT,我尝试以下:换行符在XSLT为逗号分隔值
我有以下几点:
<TR> <TD> Name: </TD> <TD><xsl:value-of select="ZNAME"/> </TD> </TR>
返回
ADAM,BRIAN,CHARLIE,DAVID
如何我可以做出这样的回报:
ADAM
BRIAN
CHARLIE
DAVID
请建议。
这种转变:
<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
如果你需要一个解决方案,不输出尾随<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
看到至少一个逗号,如果最初没有逗号,就会自行输出字符串。
如果你有这个输入' ADAM,BRIAN,CHARLIE,DAVID ',你正在寻找标记。这将是一个副本http://stackoverflow.com/questions/136500/does-xslt-have-a-split-function –
2011-02-25 19:16:10
@Ajjandro - 你应该添加,作为一个答案,所以你可以得到一个正确的upvote。 @Portal Admin - 就像Alejandro说的那样,标记化是要走的路。但是,如果您需要在其他情况下在输出中添加文字中断,请尝试使用类似“ ”的文字。 –
2011-02-25 20:54:11
@DevNull:请注意'translate(ZNAME,',',' ')'也可以正确回答这个问题**。 – 2011-02-25 21:21:59