为什么在XSLT中修剪String?

时间:2014-01-22 10:54:58

标签: xml string xslt xpath trim

我希望我的字符串显示为pdf格式,我使用XSLT XPATH从XML生成。我的XML包含字符串,其中包含一些空格,但问题是xslt会自动修剪这些字符串。我在这个W3SCHOOL链接上查了一下 Try it yourself。每当我添加一些额外的空间时,它就会被自动修剪掉,这在我的情况下我真的不需要。任何帮助将不胜感激。

--------更新------------

我尝试用 替换字符串中的所有空格并尝试显示它,但xslt没有将 作为空格。它正在考虑它就像字符串的一部分。 我也尝试使用递归来替换字符串中的特殊字符和空格(我已经用xml中的字符替换了空格,现在我的xml包含我需要空格的字符)但是在递归调用时它会显示named template is not available

<xsl:template
 name="add-spaces">
<!-- COMMENTS is string containing ~ where I need spaces -->
    <xsl:param
         name="text"
     select="COMMENTS" />
      <xsl:if
        test="$text != ''">
         <xsl:variable
           name="letter"
             select="substring($text, 1, 1)" />
         <xsl:when
        test="$letter = '~'">
       <fo:inline>
       <xsl:text>&#160;</xsl:text>
       </fo:inline>
     </xsl:when>
     <xsl:otherwise>
        <fo:inline>
         <xsl:value-of
          select="$letter" />
        </fo:inline>
      </xsl:otherwise>
      <xsl:call-template
       name="add-spaces">
               <xsl:with-param
        name="text"
        select="substring-after($text, $letter)" />
       </xsl:call-template>
</xsl:if>
</xsl:template>

2 个答案:

答案 0 :(得分:2)

您正在生成HTML。修剪普通空间是HTML的问题。您可以将&nbsp;用于剩余的空格。但是,您无法在XML中使用&nbsp;而无需将其定义为实体,但您可以使用&#160;代替:

<artist>Bob Dylan&#160;</artist>

或者您可以在根标记之前在XML中定义权利:

<!DOCTYPE cds[
<!ENTITY nbsp "&#160;">
]>

然后使用

<artist>Bob Dylan&nbsp;</artist>

然而,对我来说,如果你在开头和结尾都没有空格,那桌子看起来很难看。但是,解决方案不是添加空格,解决方案是在转换中指定填充和边距,例如。

<td style="padding:0 10 0 10"><xsl:value-of select="catalog/cd/title"/></td>

答案 1 :(得分:0)

要解决此问题,我只是在XML字符串中使用特殊字符~替换所有空格,然后在xslt中使用上面的模板,只需稍加修改(使用if而不是{{1 }},我不知道为什么when不起作用)我完成了。现在在pdf中我的所有字符串都包含我需要的空格。可能在代码之下是一个业余的,但暂时它对我有用。

when