Обычно не верно , что
position() = 1
оценивается как true()
, если текущий узел имеет родительский режим, а текущий узел является первымsubmode
дочерний элемент его родителя.
position()
указывает позицию текущего списка узлов , и это определяется по-разному, в зависимости от того, как атрибут select
<xsl:apply-templates>
указано.
Например (при условии, что предоставленный XML имеет верхний элемент, который является родительским элементом для элементов mode
), если шаблон был выбран при обработке следующим образом:
<xsl:apply-templates select="/*/mode/submode[. = 3]"/>
затем
position() = 1
верно только для 3-го submode
дочернего элемента первого mode
элемента.
Один правильный ответ:
parent::mode and not(preceding-sibling::submode)
Или, рекомендуется :
Есть отдельный шаблон:
<xsl:template match="mode/submode[1]">
В этом случае не требуется код в шаблоне, чтобы проверить, является ли текущий узел первым submode
дочерним - это уже известно bвот так.