Как добавить новый узел на самом внутреннем уровне
В моем xsl уже есть шаблоны, определенные для таких элементов, как para, graphic и т. д. Пример ниже:
<xsl:template match="para"> <fo:block> <xsl:apply-templates /> </fo:block> </xsl:template>
Но я хочу добавить дополнительный узел на самом внутреннем уровне в случае определенного значения атрибута. Например, если элемент имеет значение атрибута changeStatus = new/changed, мне нужно добавить элемент 'fo:change-bar-begin' внутри других узлов. Пример xml:
<para changeStatus="new"> This is a paragraph that has change bars applied to the whole paragraph. </para>
Вывод должен быть (здесь FO: block node исходит из других шаблонов в xsl):
<pre><fo:block> <fo:change-bar-begin change-bar-style="solid"/> This is a paragraph that has change bars applied to the whole paragraph. <fo:change-bar-end/></fo:block>
Что я уже пробовал:
Я использую этот код, но в некоторых случаях он добавляет узел на внешнем уровне, в то время как в других случаях он удаляет узлы(например, FO:block), определенные в других шаблонах. Мне нужно, чтобы он просто добавил новый элемент на самом внутреннем уровне.
<xsl:template match= "*[@changeStatus= 'new' или @changeStatus= 'changed'] " >
&ЛТ;ФО:изменить-бар-начать изменение-бар-стиль="твердый"/&ГТ;
<xsl:apply-templates select= "node () / @ *" />
<fo:change-bar-end/>
Здесь para-это всего лишь пример, и мне нужен этот код для работы со многими элементами, поэтому использование call-template-это не вариант. Пожалуйста, предложите лучший способ сделать это.