XSLT:转换后保留xml标记之间的跨度

时间:2015-05-12 18:51:38

标签: xml xslt

我有一个简单的xml和xsl,如下所示:


XML

<p><span>a</span> <span>b</span></p>


XSL

<xsl:variable name="output">
   <xsl:apply-templates select="//p"/>
</xsl:variable>

<xsl:value-of select="$output" />

<xsl:template match="p">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="span">
    <xsl:if test="string-length(normalize-space(.)) &gt; 0">
        <xsl:apply-templates/>
    </xsl:if>
</xsl:template>

请注意关闭第一个span标记和打开第二个span标记之间的空格。

目前,此转换的输出结果为:


输出

ab

在XSLT中是否存在一种方法,我们可以在转换后保留span标记之间的空间。


期望输出

a b

尝试在p和span模板匹配标记中指定 xml:space =&#34;保留&#34; 。它只是放了很多空间。

此外,我的方案并未指定我添加可以转换为空白空格的占位符标记。

1 个答案:

答案 0 :(得分:1)

在没有任何其他重写模板的情况下,我希望XSLT的片段能够产生您想要的结果,除非您在样式表的顶层有xsl:strip-space指令。如果你有其中一个声明,那么你应该删除它,或者至少添加

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

具体针对strip-space元素的p