XML源有一些数据,我想将它们转换成一个由换行符分隔的列表,并消除最后一行换行符。
这就是我目前所拥有的。。。
XML
<pool>yes</pool>
<balcony>no</balcony>
<garage>yes</garage>
XSLT-
<xsl:variable name="pool"><xsl:if test="pool='yes'"><xsl:text>Pool </xsl:text></xsl:if></xsl:variable>
<xsl:variable name="balcony"><xsl:if test="balcony='yes'"><xsl:text>Balcony </xsl:text></xsl:if></xsl:variable>
<xsl:variable name="garage"><xsl:if test="garage='yes'"><xsl:text>Garage </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> </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 </xsl:text>
</xsl:if>
</xsl:variable>
<xsl:variable name="balcony">
<xsl:if test="balcony='yes'">
<xsl:text>Balcony </xsl:text>
</xsl:if></xsl:variable>
<xsl:variable name="garage">
<xsl:if test="garage='yes'">
<xsl:text>Garage </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>