我希望输出带空格但是我想在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
答案 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>