我有一个使用 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>
</xsl:text>
<xsl:variable name="offset" select="rdt:all2dec(rdt:resolve_offset(./@offset))"/>
<xsl:text>Test 3</xsl:text><xsl:text>
</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>
</xsl:text>
<xsl:text>Test 5</xsl:text><xsl:text>
</xsl:text>
</xsl:template>
我正在使用下面的表达式来跟踪文本是如何写入我的文件的
<xsl:text>Test #</xsl:text><xsl:text>
</xsl:text>
运行我的代码“Test 2”和“Test 3”可以正确打印,没有缩进并且彼此紧随其后。现在"Test 4"打印出 4 的 Indentation 和"Test 3"下面的两行。"Test 5"也正确打印 IE 没有缩进,并且在"Test 4"之后的下一行。看起来像这样
Test 2
Test 3
Test 4
Test 5
我找不到它为什么这样做。在我看来,它是在输入模板时发生的事情。因为我在此之后执行了第二个模板,其行为相似。
如果我现在取出并删除 xsl:text 并且只保留文本。
<xsl:template match="enum" mode="map">
Test 4<xsl:text>
</xsl:text>
<xsl:text>Test 5</xsl:text><xsl:text>
</xsl:text>
</xsl:template>
看起来有点不同
Test 2
Test 3
Test 4
Test 5
现在“测试 4”有正确的缩进但是现在它在“测试 3”下面 3 行
我希望这是有道理的。
我正在使用 oXygen,但我似乎无法调试我的出路
问候