XSLT1.0使用IF构建换行符分隔的列表,并删除最后一行换行符



XML源有一些数据,我想将它们转换成一个由换行符分隔的列表,并消除最后一行换行符。

这就是我目前所拥有的。。。

XML

<pool>yes</pool>
<balcony>no</balcony>
<garage>yes</garage>

XSLT-

<xsl:variable name="pool"><xsl:if test="pool='yes'"><xsl:text>Pool&#10;</xsl:text></xsl:if></xsl:variable>
<xsl:variable name="balcony"><xsl:if test="balcony='yes'"><xsl:text>Balcony&#10;</xsl:text></xsl:if></xsl:variable>
<xsl:variable name="garage"><xsl:if test="garage='yes'"><xsl:text>Garage&#10;</xsl:text></xsl:if></xsl:variable>
<xsl:variable name="features"><xsl:value-of select="concat($pool,$balcony,$garage)"/></xsl:variable>
<xsl:value-of select="$features"/>

在这一点上,我有:

Pool<newline>
Garage<newline>
blank line

我想删除最后一行换行符和空行。

有没有办法摆脱这种情况,或者改变我把列表放在一起的方式来生成列表?

考虑以下示例:

XML

<features>
<pool>yes</pool>
<balcony>no</balcony>
<garage>yes</garage>
</features>

XSLT 1.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="features">
<xsl:for-each select="*[.='yes']">
<xsl:value-of select="name()"/>
<xsl:if test="position()!=last()">
<xsl:text>&#10;</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

结果

pool
garage

要按您的方式执行,您可以简单地删除最后一个换行符:

<xsl:template match="features">
<xsl:variable name="pool">
<xsl:if test="pool='yes'">
<xsl:text>Pool&#10;</xsl:text>
</xsl:if>
</xsl:variable>
<xsl:variable name="balcony">
<xsl:if test="balcony='yes'">
<xsl:text>Balcony&#10;</xsl:text>
</xsl:if></xsl:variable>
<xsl:variable name="garage">
<xsl:if test="garage='yes'">
<xsl:text>Garage&#10;</xsl:text>
</xsl:if>
</xsl:variable>
<xsl:variable name="features" select="concat($pool, $balcony, $garage)"/>
<xsl:value-of select="substring($features, 1, string-length($features) - 1)"/>
</xsl:template>

相关内容

  • 没有找到相关文章

最新更新