2010-03-13 106 views
2

我试图从XML格式化表格。比方说,我在XML此行删除XSLT中引号内的空格

<country>Dominican Republic</country> 

我希望得到我的表看起来像这样

<td class="country DominicanRepublic">Dominican Republic</td> 

我已经试过这样:

<td class="country {country}"><xsl:value-of select="country"/></td> 

那么这个:

<xsl:element name="td"> 
<xsl:attribute name="class"> 
    <xsl:text>country </xsl:text> 
    <xsl:value-of select="normalize-space(country)"/> 
</xsl:attribute> 
<xsl:value-of select="country"/> 
</xsl:element> 

normalize-space()不会删除名称的两个部分之间的空格,因此我不能使用<xsl:strip-space elements="country"/>,因为我在表格单元格中显示名称时需要空格。

如何从类内的值中删除空格,但不是单元格中的文本?

回答

9

使用translate()功能,以取代空格''没有'':

<xsl:element name="td"> 
    <xsl:attribute name="class"> 
     <xsl:text>country </xsl:text> 
     <xsl:value-of select="translate(country,' ','')"/> 
     </xsl:attribute> 
    <xsl:value-of select="country"/> 
</xsl:element> 

您可以使用normalize-space(),删除任何前导和尾随空白,并将字符间的多个空格转换为单个空格。然后,通过translate()发送结果来替换任何剩余的空格:

<xsl:element name="td"> 
    <xsl:attribute name="class"> 
    <xsl:text>country </xsl:text> 
    <xsl:value-of select="translate(normalize-space(country),' ','')"/> 
    </xsl:attribute> 
    <xsl:value-of select="normalize-space(country)"/> 
</xsl:element> 
+0

谢谢你的工作!我还在学习XSL,所以感谢帮助:) – Mottie 2010-03-13 01:11:01

+0

其实XML是来自其他站点的提要,并且文本前面有空白区域。翻译功能并没有消除这一点,任何解决方案呢?我不确定如何叠加功能,比如在翻译后使用国家标准化。 – Mottie 2010-03-13 01:35:30

+1

如果您使用translate来移除空格,它应该为所有空格执行此操作。你确定它不是标签,回车或其他空白空间吗?你可以使用'normalize-space()'并将结果发送到'translate()'。我会用一个例子来更新答案。 – 2010-03-13 02:15:27