1

我无法让我的 XSL 保留属性值的空白。我有如下所示的 XML:

<FUNCTION_CALL name="SUBSTR">
    <ARGUMENTS>
            <CONSTANT type="CHAR" value="        "/>
            <CONSTANT type="NUMERIC" value="1"/>
            <CONSTANT type="NUMERIC" value="8"/>
    </ARGUMENTS>
</FUNCTION_CALL>

我需要渲染:

SUBSTR('          ', 1, 8) 

但是,我得到

SUBSTR('', 1, 8)

我拥有的 XSL 是:

<xsl:template match="FUNCTION_CALL">
    <xsl:value-of select="@name"/><xsl:apply-templates/>
</xsl:template>

<xsl:template match="FUNCTION_CALL[@ALIAS]">
    <xsl:value-of select="@name"/><xsl:apply-templates/> AS <xsl:value-of select="@ALIAS"/>
</xsl:template>

<xsl:template match="ARGUMENTS">
(
<xsl:for-each select="COLUMN | CONSTANT">
    <xsl:if test="position()&gt;1">, </xsl:if>
    <xsl:apply-templates select="."/>
</xsl:for-each> 
)   
</xsl:template>

<xsl:template match="CONSTANT[@type='CHAR']" xml:space="preserve">
    '<xsl:value-of select="@value"/>'
</xsl:template>

我已经尝试过xml:space="preserve"(在示例代码中),<xsl:preserve-space elements="CONSTANT" /><xsl:output method="html" indent="yes"/>无法使用空格渲染输出。我是 XSL 和 XSLT 的相对初学者,可以使用一些帮助。

4

1 回答 1

0

您可能是 XML 的属性值规范化的受害者,该过程会破坏属性值中的空格,并且需要执行符合规范的解析器。您可以通过转义属性中的空格来抑制这种情况,例如value="&#32;&#32;&#32;&#32;&#32;&#32;&#32;"

于 2013-09-26T08:23:20.000 回答