xsl:text会发生什么?

时间:2018-05-18 14:35:58

标签: xml xslt xslt-3.0 oxygenxml

我有一个使用xslt生成文本文件的代码。

要在此处粘贴相当大量的数据,因此我会尝试并仅过去相关数据。

我有一个看起来像这样的模板,这是我的出发点

<xsl:template match="addrmap[not(@name='ADDRMAP_NAME_NOT_USED')]">
  <xsl:result-document href="{$OUTPUT_DIR}/{@name}_defs_p.vhd">
    <xsl:call-template name="vhdl_header">
      <xsl:with-param name="block" select="."></xsl:with-param>
    </xsl:call-template>

<xsl:text>
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

use work.pk_avalon_mm_extif_defs;
</xsl:text>

    <xsl:text>Test 2</xsl:text><xsl:text>&#xa;</xsl:text>
    <xsl:variable name="offset" select="rdt:all2dec(rdt:resolve_offset(./@offset))"/>
    <xsl:text>Test 3</xsl:text><xsl:text>&#xa;</xsl:text>
    <xsl:apply-templates mode="map">
      <xsl:with-param name="offset" select="$offset"/>
    </xsl:apply-templates>

    </xsl:call-template>
  </xsl:result-document>
</xsl:template>


<xsl:template match="enum" mode="map">
  <xsl:text>Test 4</xsl:text><xsl:text>&#xa;</xsl:text>
  <xsl:text>Test 5</xsl:text><xsl:text>&#xa;</xsl:text>
</xsl:template>

我正在使用下面的表达式来跟踪文本如何写入我的文件

<xsl:text>Test #</xsl:text><xsl:text>&#xa;</xsl:text>

运行我的代码&#34;测试2&#34; &#34;测试3&#34; 正确打印,没有缩进,并且紧接着彼此。现在&#34;测试4&#34; &#34;测试3&#34; 下打印和缩进4和两行。 &#34;测试5&#34; 也正确打印IE没有缩进,并且在&#34;测试4&#34; 之后的下一行。看起来像这样

Test 2
Test 3


    Test 4
Test 5

我找不到为什么这样做。在我看来,它是在输入模板时发生的事情。因为我有一个第二个模板执行后,行为相似。

如果我现在接受并删除xsl:text并将文本原始化。

<xsl:template match="enum" mode="map">
Test 4<xsl:text>&#xa;</xsl:text>
  <xsl:text>Test 5</xsl:text><xsl:text>&#xa;</xsl:text>
</xsl:template>

看起来有点不同

Test 2
Test 3



Test 4
Test 5

现在&#34;测试4&#34; 有正确的缩进,但现在它在&#34;测试3&#34;

我希望这是有道理的。

我正在使用oXygen,但我似乎无法调试我的方式

此致

1 个答案:

答案 0 :(得分:1)

考虑将问题减少到最小但完整的样本,以便我们重现问题。到目前为止,我们只能猜测处理所有子节点(包括文本节点)的xsl:apply-templates mode="map"从输入输出一些文本节点,通过您自己的模板或内置模板或xsl:mode设置去做。但是你还没有表现出任何意见。

如果您只想处理enum元素,可以尝试<xsl:apply-templates select="enum" mode="map"/>,如果您只想处理子元素而不是文本节点,请使用select="*"。更激进的方法可能是用xsl:strip-space去除空格。

相关问题