Что происходит с xsl: text? - PullRequest
0 голосов
/ 18 мая 2018

У меня есть код, который генерирует текстовый файл с использованием 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>

Выполнение моего кода «Тест 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>&#xa;</xsl:text>
  <xsl:text>Test 5</xsl:text><xsl:text>&#xa;</xsl:text>
</xsl:template>

Это выглядит немного иначе

Test 2
Test 3



Test 4
Test 5

теперь «Тест 4» имеет правильный отступ, однако теперь он на 3 строки ниже «Тест 3»

Надеюсь, это имеет смысл.

Я использую oXygen, но я не могу отладить свой выход из этого

С уважением

1 Ответ

0 голосов
/ 18 мая 2018

Подумайте о том, чтобы свести ваши проблемы к минимальным, но полным образцам, чтобы мы могли воспроизвести проблему.Пока мы можем только догадываться, что xsl:apply-templates mode="map", который обрабатывает все дочерние узлы (включая текстовые узлы), выводит некоторые текстовые узлы из ввода, либо через ваши собственные шаблоны, либо как встроенные шаблоны или ваши настройки xsl:mode.Но вы не показали никакой информации.

Если вы хотите обрабатывать только enum элементы, вы можете попробовать <xsl:apply-templates select="enum" mode="map"/>, если вы хотите обрабатывать только дочерние элементы, но не текстовые узлы, используйте select="*".Более радикальный подход может заключаться в том, чтобы убрать пробел с помощью xsl:strip-space.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...