<xsl:variable name="scoredItems"
select="./item/../attributes/variable_name[@value='SCORE']"/>
Выбирает все элементы variable-name
, так что их атрибут value
имеет значение 'SCORE'
.И это это только один узел.
Вы хотите:
self::section[attributes/variable_name/@value='SCORE']/item
Это выбирает все элементы элемента в случаеузел контекста (section
) имеет элемент attributes
, который имеет элемент variable_name
, чей атрибут value
равен «SCORE».
В случае, если узел контекста не имеет этого свойства,тогда приведенное выше выражение XPath ничего не выбирает.
Теперь исправленное преобразование :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="section">
<xsl:variable name="scoredItems"
select="self::section[attributes/variable_name/@value='SCORE']/item"/>
<xsl:variable name="scoredItemsCount" select="count($scoredItems)"/>
<xsl:value-of select="$scoredItemsCount"/>
</xsl:template>
</xsl:stylesheet>
дает желаемый результат :
3
0