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 に答える