0

在 XSLT 中,使用 ,它会在渲染值之前生成一个换行符,在它之后生成另一个换行符。这里有一个例子:

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

渲染的结果是:


                                                   "
                                             09/07/2012
"

如您所见,它在结果值之前和之后放置了两个换行符,而所需的结果是:

"09/07/2012"

原始输入是:

这是原始输入,对此感到抱歉。

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

我在 Oracle Server Bus 中执行这个 XSLT

任何帮助将不胜感激。

4

4 回答 4

4

额外的空间 也可能来自选定的文本。用于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"

于 2012-09-21T06:44:51.537 回答
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>
于 2012-09-21T06:48:40.260 回答
0

Perhaps an implementation specific bug?

Using xsltproc all the above work as expected, although the expected results of bare newline+whitespace+quote+date+quote+newline+space is for the /external/ white-space to be copied as well. All the other examples produce the same 13 bytes, including a trailing newline.

Using libxml 20706, libxslt 10124 and libexslt 813 xsltproc was compiled against libxml 20701, libxslt 10124 and libexslt 813 libxslt 10124 was compiled against libxml 20701 libexslt 813 was compiled against libxml 20701

于 2013-08-08T15:41:12.280 回答
0

可能原始 XML 源包含这些换行符(缩进),尝试类似:

<xsl:value-of select="concat('~', normalize-space(./Item/Data[last()]/text()), '~')"/>
于 2012-09-21T06:50:07.933 回答