Если я жестко закодировал индексированное число
«$ player» на любой номер индекса I
хочу, как показано ниже:
<template match="/">
<xsl:value-of select="result[2]/@name" />
</template>
это работает.
Нет, любой совместимый процессор XSLT ничего не выберет .
result[2]/@name
является относительным выражением для текущего узла, а текущий узел является /
- document-node.
Любой правильно сформированный XML-документ имеет ровно один верхний элемент (никогда не два), поэтому
result[2]
эквивалентно:
/result[2]
и ничего не выбирает.
Скорее всего, вы имеете дело с другим выражением, которое вы не показывали (или шаблон не соответствует просто /
).
Также
<xsl:param name="player" data-type="number"/>
это неверный синтаксис. Инструкция <xsl:param>
не имеет атрибута data-type
.
Фактически, в XSLT 1.0 нет никакого способа указать тип переменных или параметров .
Вот почему в:
result[$player]/@name
$player
обрабатывается как строка, а не как целое число.
Чтобы достичь желаемой "индексации", используйте :
result[position()=$player]/@name
Функция position()
возвращает число, и это приводит к преобразованию другого операнда оператора =
в (и используется как) число.