XSLT 2.0 предлагает преимущество передачи параметра набора узлов в качестве части
функция position ().
Это утверждение неверно. Функция position()
не имеет аргументов - ни в XPath 1.0, ни в XPath 2.0, который использует XSLT 2.0.
То, что вы хотите, это :
count(preceding::product) +1
или, альтернативно, можно использовать инструкцию xsl:number
.
Вот демонстрация обоих этих методов :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="vLastProd" select=
"//product[@name='Back to the Future']"/>
<xsl:template match="/">
<xsl:value-of select="count($vLastProd/preceding::product) +1"/>
=========
<xsl:text/>
<xsl:apply-templates select="$vLastProd"/>
</xsl:template>
<xsl:template match="product">
<xsl:number level="any" count="product"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к предоставленному документу XML :
<wishlists>
<wishlist name="Games">
<product name="Crash Bandicoot"/>
<product name="Super Mario Brothers"/>
<product name="Sonic the Hedgehog"/>
</wishlist>
<wishlist name="Movies">
<product name="Back to the Future"/>
</wishlist>
</wishlists>
требуемый, правильный результат получается с использованием обоих методов - и вывод :
4
=========
4
Примечание : результат xsl:number
должен быть зафиксирован внутри тела переменной, если он не будет выводиться напрямую.