Как я понял, вы хотите опустить листовой элемент (без дочерних элементов), если у него есть предыдущий брат, который:
- также является листомэлемент ,
- имеет то же имя ,
- имеет одинаковое текстовое содержимое .
Итакнаиболее интуитивное решение (я думаю) - написать пустой шаблон, соответствующий только этим узлам:
<xsl:template match="*[not(*)][preceding-sibling::*[1][not(*)]
[name() = current()/name()][text() = current()/text()]]"/>
Краткое описание атрибута соответствия:
*[not(*)]
-Каждый элемент без дочернего элемента (листовой элемент). [
- Начало второго предиката. preceding-sibling::*[1]
- Возьмите первого предшествующего брата. [not(*)]
- У него не должно быть дочерних элементов. [name() = current()/name()]
- У него должно быть то же имякак «начальный» элемент. [text() = current()/text()]
- должен иметь тот же текст, что и «начальный» элемент.
]
- Конец второго предиката.
Конечно, сценарий должен также содержать шаблон идентификации .
Рабочий пример с немного расширенным источником см. http://xsltransform.net/jxN8Nqm
Если требование в отношении того же текста не требуется, удалите соответствующий фрагмент предиката.