2012-09-21 75 views
0

在XSLT中,使用它會在呈現值之前生成一個換行符,而在另一個之後生成換行符。 這裏談到一個例子:XSLT <xsl:value-of>會生成額外的換行符

<xsl:when test="name(.) = 'Item'"> 
    "<xsl:value-of select="./Item/Data[last()]/text()"/>" 
</xsl:when> 

而呈現的結果是:


                " 
              09/07/2012 
" 

正如你所看到的,它使而所需的結果是兩個前行的休息時間和結果值後,:

"09/07/2012"

原來的輸入是:

這裏談到的由來al輸入,對不起。

         <Item> 
             <Item> 
              <Data>105</Data> 
              <Data>09/07/2012</Data> 
             </Item> 
             </Item> 

我執行一個Oracle服務總線

任何幫助,在這個XSLT將不勝感激。

+0

這是不可能告訴沒有輸入文件 –

+0

我加了它,對不起 –

+0

也許有趣的說這個XSLT是在Oracle服務器總線中執行的 –

回答

3

額外空間也可能是來自所選文本。使用normalize-space()刪除它。

<xsl:value-of select="normalize-space(./Item/Data[last()]/text())"/> 

編輯 Overnuts是利用周圍的報價<xsl:text>正確的,否則,XSLT處理器將開/ 收盤報價之前保留換行符。但是,我仍然不明白爲什麼換行符可以在報價和你的xsl:value-of之間?

我已經試過以下

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="/xml" xml:space="default"> 
     <xsl:apply-templates select="*" /> 
    </xsl:template> 

    <xsl:template match="*" xml:space="default"> 
     <xsl:choose> 
      <xsl:when test="name(.) = 'Item'"> 
       <xsl:text>"</xsl:text> 
       <xsl:value-of select="normalize-space(./Item/Data[last()]/text())"/> 
       <xsl:text>"</xsl:text> 
      </xsl:when> 
     </xsl:choose> 
    </xsl:template> 

</xsl:stylesheet> 

當這個XML運行:

<xml> 
    <Item> 
     <Item> 
      <Data>105</Data> 
      <Data>09/07/2012</Data> 
     </Item> 
    </Item> 
</xml> 

主要生產"09/07/2012"

3

我想你可以嘗試:

一切都在一個單一行(快速和骯髒):

<xsl:when test="name(.) = 'Item'">"<xsl:value-of select="./Item/Data[last()]/text()"/>"</xsl:when> 

或使用標籤就像這樣(最佳實踐):

<xsl:when test="name(.) = 'Item'"> 
    <xsl:text>"</xsl:text> 
    <xsl:value-of select="./Item/Data[last()]/text()"/>  
    <xsl:text>"</xsl:text> 
</xsl:when> 
+0

它工作正常!每個字符串必須在xsl:text標籤下,如果不是,則會在字符串和xsl:value-of的渲染結果之間插入額外的行。 –

0

可能原始的XML索裏包含這些換行符(缺口),你可以試試:

<xsl:value-of select="concat('~', normalize-space(./Item/Data[last()]/text()), '~')"/> 
0

也許一個實現特定的錯誤?

使用xsltproc的所有上述按預期方式工作,儘管裸換行符+空白+報價+日期+報價+換行符+空間的預期結果是要被複製爲好/外部/空格。所有其他示例產生相同的13個字節,包括尾隨換行符。

使用的libxml 20706,的libxslt 10124和libexslt 813 xsltproc的編譯針對的libxml 20701,的libxslt 10124和libexslt 813 的libxslt 10124編譯反對的libxml 20701 libexslt 813是反對的libxml編譯20701