Member 13463091 Ответов: 1

Как добавить новый узел на самом внутреннем уровне


В моем 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-это не вариант. Пожалуйста, предложите лучший способ сделать это.

1 Ответов

Рейтинг:
2

phil.o

Может быть XSLT < xsl:if & gt; элемент[^] может быть чем-нибудь помочь?
Любезно.