XSLT 1.0 и XPath 1.0 не имеют ничего достаточно близкого к «массиву двойников».
В XSLT такой массив может быть смоделирован набором элементов с одним дочерним узлом текстового узла (небольшое содержание в терминологии XSD), например:
<num>1.2345</num>
<num>2.2345</num>
<num>3.2345</num>
<num>4.2345</num>
<num>-.2345</num>
Такой набор узлов может быть передан в качестве внешнего параметра инициатором преобразования , и способ его выполнения зависит от конкретного процессора XSLT. Например, способ передачи параметров в XslCompiledTransform.Transform()
определен здесь .
Если вышеуказанный набор узлов был передан как значение глобально определенного xsl:param
с именем pDoubles
, то
$pDoubles[$k]
выбирает элемент $ k-й num
в наборе узлов, и его дочерний текстовый узел может быть неявно использован в других выражениях. Например:
$pDoubles[1] + $pDoubles[2]
оценивается как
3.469
В XPath 2.0 (и, следовательно, в XSLT 2.0) существует тип данных, который намного ближе к массиву значений - тип данных последовательности .
В XPath 2.0 наиболее близко к массиву пар - это последовательность пар (xs:double
). Такая последовательность может быть передана как внешний параметр в преобразование XSLT 2.0, а также подробности, как это сделать. это зависит от поставщика. Например, как это сделать для саксонцев, посмотрите здесь .
Обратите внимание : наборы узлов в XPath 1.0 и только последовательности в XPath 2.0 имитируют массивы - они не являются массивами, и одно из самых важных отличий заключается в том, что хотя массив доступ очень быстрый (O (1)), доступ к произвольному узлу / элементу из набора / последовательности узлов может быть O (N).