Вы должны написать скрипт следующим образом:
Соответствие шаблону TextSymbols
следует:
- Применять шаблоны так же, как шаблон идентификации.
- Затем примените шаблоны снова, но только для
TextSymbol
с SymbolKey
в нужном диапазоне в «специальном» (prepend
) режиме.
Должен существовать шаблон, соответствующий SymbolKey
в режиме prepend
, который записывает в вывод «92» (строка, которую нужно добавить), а затем в свое собственное значение.
И еще два расширения идентификационного шаблона .Он должен:
- быть выполнен в всех режимах (
mode="#all
). - Содержащийся
apply-templates
должен сохранять текущий режим (mode="#current"
)
Таким образом, весь сценарий может выглядеть следующим образом:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="TextSymbols">
<xsl:copy>
<xsl:apply-templates/>
<xsl:apply-templates mode="prepend"
select="TextSymbol[number(SymbolKey) ge 2000 and number(SymbolKey) le 3000]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="SymbolKey" mode="prepend">
<xsl:copy><xsl:value-of select="concat('92', .)"/></xsl:copy>
</xsl:template>
<xsl:template match="@*|node()" mode="#all">
<xsl:copy><xsl:apply-templates select="@*|node()" mode="#current"/></xsl:copy>
</xsl:template>
</xsl:transform>
Рабочий пример см. http://xsltransform.net/gVAjbSY
И примечаниеотносительно ожидаемого результата:
Вы ничего не написали об изменении содержимого Name
элементов, поэтому я предполагаю, что этот элемент в последнем выводе TextSymbol
должен быть TIR
(как во входных данных), а не LEX
.