避免子节点中的条带空格

时间:2016-03-02 21:49:45

标签: xslt-1.0

我希望输出带空格但是我想在xslt中保留<xsl:strip-space elements="*"/>。目前,XSLT以下是&#34; onetwofour&#34;没有空格。如果我删除<xsl:strip-space elements="*"/>标记输出将按预期为&#34;一个两个四&#34; (注意第二字和第四字之间的两个空格是由于subitem3)

注意:&#34; subitem3&#34; tag有一个空格,应保留在输出中。

我有什么方法可以保留<xsl:strip-space elements="*"/>标签并且还有空格(因此输出应该像这样=&gt;&#34;一两四&#34;)。

如果由于包含xsl而无法实现这一点:至少在subitem3空间的顶部可以保留(因此预期输出在这种情况下可以是&#34; onetwo four&#34;在单词之前注意空格&#39;四&#39;由于subitem3)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="item">
    <xsl:for-each select="child::node()">
                    <xsl:choose>
                            <xsl:when test="name() = 'some_tag'">
                                <!-- Do nothing for now -->
                            </xsl:when>                         
                            <xsl:otherwise>
                                <xsl:value-of select="descendant-or-self::text()"/> 
                            </xsl:otherwise>
                        </xsl:choose>
                </xsl:for-each>


</xsl:template>
</xsl:stylesheet>

XML:

<?xml version="1.0" encoding="UTF-8"?>
<items>
    <item>
        <subitem1>one</subitem1> <subitem2>two</subitem2> <subitem3> </subitem3> <subitem4>four</subitem4>
    </item>
</items> 

目前的输出: 的 onetwofour

预期产出:  一两四 onetwo four

1 个答案:

答案 0 :(得分:1)

如果要保留仅包含空格字符的文本节点,则不要使用:

<xsl:strip-space elements="*"/>

或通过以下方式覆盖它:

<xsl:preserve-space elements="subitem3"/>

或者,您可以在写入输出树时插入自己的空格 - 例如:

<xsl:template match="item">
    <xsl:for-each select="*">
        <xsl:value-of select="."/> 
        <xsl:if test="not(string())"> 
            <xsl:text> </xsl:text>
        </xsl:if>
    </xsl:for-each>
</xsl:template>