xslt получить текст, заданный на узле, с помощью ключевой функции
Можно ли получить доступ к текстовому узлу набора узлов с помощью ключевой функции в xslt 1.0? У меня есть следующий код:
<xsl:variable name="Items">
<Item ID="ID1">name1</Item>
<Item ID="ID2">name2</Item>
</xsl:variable>
<xsl:key name="get_item_by_ID" match="exsl:node-set($Items)/Item" use="@ID"/>
<xsl:template match="/Items">
<xsl:value-of select="key('get_item_by_ID', @ItemID)/text()"></xsl:value-of>
</xsl:template>
Я хочу найти текст набора узлов по ItemID текущего Item, чтобы переименовать Item по его предопределенному тексту набора узлов (ID1: name1, ID2: name2).
1 ответ
Решение
У вас есть проблема контекста здесь:
Набор узлов, созданный exsl:node-set($Items)
это отдельный "документ". Вы не можете указать документ для соответствия в match
атрибут <key>
элемент.
Вы должны переключить контекст на нужный документ, прежде чем вызывать функцию key() (в XSLT 2.0 вы можете указать документ для сопоставления внутри самой функции key()).