На самом деле это не XSLT, а вопрос XPath.
В XPath 1.0 нет ничего похожего на тип данных "список".Набор узлов - это набор, и у него нет порядка.
В XPath 2.0 существует тип данных sequence .Любые элементы в последовательности упорядочены.Это не имеет ничего общего с порядком документов.Кроме того, один и тот же элемент (или узел) может появляться в последовательности более одного раза.
Таким образом, в XSLT 2.0 просто используется оператор конкатенации последовательности XPath 2.0 ,
:
//*[@id='parentTransition'] , //*[@id='childTransition']
, и это оценивает последовательность всех элементов в документе с атрибутом id
'parentTransition'
, за которым следуют все элементы в документе с атрибутом id
'childTransition'
В XSLT все еще возможно получить доступ и обрабатывать узлы не в порядке документа : например, с помощью инструкции <xsl:sort>
- однако набор узлов, которые обрабатываются в результате <xsl:apply-templates>
или <xsl:for-each>
, являетсяnode-list
- не набор узлов.
Другим примером оценки узлов не в порядке документа является функция position()
в <xsl:apply-templates>
или <xsl:for-each>
, которые имеют <xsl:sort>
дочерний или в предикате шага местоположения (выражения XPath), в котором используется обратная ось (например, ancesstor::
или preceeding::
)