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()).

Другие вопросы по тегам