2014-01-22 75 views
1

我想我的字符串顯示爲pdf格式,我使用XSLT XPATH從XML生成。我的XML包含有一些空格的字符串,但問題是xslt會自動修剪這些字符串。我已在此W3SCHOOL鏈接上檢查它 Try it yourself。每當我添加一些額外的空間,它就會自動修剪,我真的不需要在我的情況下。任何幫助將不勝感激。爲什麼String在XSLT中被修剪?

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

我試圖與 替換字符串中的所有空間,並試圖顯示,但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> 
+0

請提供一些示例代碼,其中您的字符串被修剪,並解釋您正在使用哪些工具(FOP?)。 – glmxndr

+0

XSLT和XPath不生成PDF文件。那麼你使用什麼工具?無論如何,你需要在這裏添加你的XSLT代碼。 –

回答

0

要解決這個問題,我只是替換爲特殊字符的所有空格在XML字符串說~然後在XSLT我用上面只是稍加修改模板(使用if而不是when,我不知道爲什麼when沒有工作),我完成了。現在在pdf中,我所有的字符串都包含需要它們的空白區域。可能下面的代碼是一個業餘的,但暫時它已經爲我工作。

<xsl:template name="add-spaces"> 
    <xsl:param name="text" select="COMMENTS" /> 
    <xsl:if test="$text != ''"> 
     <xsl:variable name="letter" select="substring($text, 1, 1)" /> 
     <xsl:if test="$letter = '~'"> 
      <xsl:text>&#160;</xsl:text> 
     </xsl:if> 
     <xsl:if test="$letter != '~'"> 
      <fo:inline> 
       <xsl:value-of select="$letter" /> 
      </fo:inline> 
     </xsl:if> 
     <xsl:call-template name="add-spaces"> 
      <xsl:with-param name="text" 
       select="substring-after($text, $letter)" /> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
    <!-- Above is template and its call where I displayed strings is--> 
<xsl:call-template 
name="add-spaces"> 
<xsl:with-param 
    name="text" 
    select="COMMENTS" /> 
</xsl:call-template> 
2

您正在生成HTML。這是一個HTML問題,正常空間被修剪。您將使用&nbsp;留下的空間。但是,你不能使用你的XML &nbsp;沒有將其定義爲一個實體,但你可以使用&#160;代替:

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

或者你也可以根標籤之前定義的XML的entitiy:

<!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> 
+0

我用' '替換了我的字符串中的''(空格)',我的xslt並沒有把它當作空間而是字符串的一部分。例如,字符串「Bob Dylan  」顯示爲「Bob Dylan  」而不是「Bob Dylan」。 – aneela

+0

有什麼辦法,我可以讀取每個字符,並將其改爲xslt中的空格。我正在談論重複字符串中的每個字符,然後就特殊字符的出現作出決定?我已經嘗試遞歸,但它表示'''在遞歸調用時不能使用'命名模板'。 – aneela