Как я понимаю, ключ можно хранить
более одного значения для конкретного
элемент
Нет. Ключ может отображать значение с более чем одним узлом.
Итак, вот:
<xsl:variable name="enemyList"
select="key('enemyItems', @key)/attributes/@value"/>
<xsl:if test="string-length($enemyList) > 0">
<xsl:value-of select="@name"/>
</xsl:if>
Вы говорите: позвольте быть $ templeList всех атрибутов value
из attributes
дочерних элементов каждого узла, у которого есть ключ 'врага-элемента' со значением, равным атрибуту key
контекста узла, и если длина строки строкового значения из первого узла в наборе узлов $ templeList больше 0, затем выведите значение атрибута name
контекстного узла.
EDIT : во втором фрагменте XSLT:
<xsl:template match="item">
<xsl:for-each select="key('enemyItems', @key)">
<xsl:variable name="enemyList"
select="???/attributes/@value"/>
<xsl:if test="string-length($enemyList) > 0">
<xsl:value-of select="@name"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
Теперь внутри for-each
контекстным узлом является каждый узел, который сопоставлен с ключом. Таким образом, вы можете определить $enemyList
как:
<xsl:variable name="enemyList" select="attributes/@value"/>
Это также может вернуть несколько узлов, если имеется более одного attributes
потомка с атрибутом value
. Но вот, это:
<xsl:value-of select="@name"/>
Это атрибут de name
узла контекста ... (тот, который сопоставлен с ключом)