Что происходит с xsl:text?
У меня есть код, который генерирует текстовый файл, используя 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>
Выполнение моего кода "Тест 2" и "Тест 3" печатается правильно, без отступов и сразу после них. Теперь "Тест 4" печатается с отступом 4 и двумя строками ниже "Тест 3". "Тест 5" также печатается правильно, т.е. без отступов и одной следующей строки после "Тест 4". Это выглядит так
Test 2
Test 3
Test 4
Test 5
Я не могу найти, почему это делает это. Мне кажется, это происходит при входе в шаблон. потому что у меня есть второй шаблон выполнения после этого, который ведет себя аналогично.
Если я сейчас возьму и удаляю xsl:text и просто получаю текст raw.
<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, но я не могу отладить свой выход из этого
С уважением
1 ответ
Подумайте о том, чтобы свести ваши проблемы к минимальным, но полным образцам, чтобы мы могли воспроизвести проблему. Пока мы можем только догадываться, что xsl:apply-templates mode="map"
который обрабатывает все дочерние узлы (включая текстовые узлы) выводит некоторые текстовые узлы из ввода, либо через ваши собственные шаблоны, либо как встроенные шаблоны или ваши xsl:mode
настройки делают это. Но вы не показали никакой информации.
Если вы хотите только обработать enum
элементы, которые вы можете попробовать <xsl:apply-templates select="enum" mode="map"/>
, если вы хотите обрабатывать только дочерние элементы, но не текстовые узлы, используйте select="*"
, Более радикальным подходом может быть удаление пустого пространства xsl:strip-space
,