2012-09-21 73 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