Из спецификации XSLT 1.0 W3C :
"Если не указан атрибут value
, вставляется xsl:number
element
число, основанное на положении текущего узла в исходном дереве. Следующие атрибуты управляют нумерацией текущего узла:
Атрибут level
указывает, какие уровни исходного дерева должныучитывается, он имеет значения single
, multiple
или any
. По умолчанию это single
.
Атрибут count
- это шаблон, который указывает, какие узлы должны учитываться на этих уровнях.Если атрибут count не указан, то по умолчанию используется шаблон, соответствующий любому узлу с тем же типом узла, что и текущий узел, и, если текущий узел имеет расширенное имя, с таким же расширенным именем, что и текущий узел
Когда level="any"
, он создает список длиной один, содержащий количество узлов, которые соответствуют шаблону count
и принадлежат к набору, содержащему текущий узел и все узлы на любом уровне.документа, находящегося перед текущим узлом в порядке документа, исключая любые узлы пространства имен и атрибутов (другими словами объединение членов предыдущей оси и оси ancestor-or-self ).Если указан атрибут from
, то учитываются только узлы после первого узла перед текущим узлом, соответствующие шаблону from.".
Из этого текста ясно, что учитываются только узлы, которые являются предками или предшествуют текущему узлу .
В этом вопросе текущийузел является верхним узлом элемента row
и имеет 0 предков и 0 предшествующих узлов элемента.
Следовательно, возвращаемый результат верен!
Solution :
Использование:
count(descendant::option)
Результатом вычисления этого выражения является количество всех option
элементов в документе, которые являются потомками текущего узла (элемент row
).