Хороший вопрос, + 1.
Вам необходимо определить, что означает позиция родителя .
parent::node()[position() = 1]
всегда true()
, когда существует родительский узел (false()
, только если контекстный узел является узлом документа /
, так как этот узел является верхним узлом в дереве и не имеет родителя)потому что любой узел в дереве (правильно сформированный XML-документ) по определению может иметь не более одного родительского узла.
Скорее всего, вы хотите проверить, что родительский элемент является первым в порядке документасреди его братьев и сестер .Один из способов проверить это:
not(parent::node()/preceding-sibling::*)
Итак, полный код становится :
<xsl:if test="position() = 1 or not(parent::node()/preceding-sibling::*)">
<!-- do something -->
</xsl:if>