Существует два очевидных, простых решения, одно из которых поддерживается только в XSLT 2.0:
I. Общее решение
Это работает как с XSLT 1.0, так и с XSLT 2.0.
Определите свое собственное пространство имен и поместите свой набор узлов в качестве дочерних элементов элемента в этом пространстве имен, причем этот элемент глобально помещен в таблицу стилей (дочерний элемент инструкции <xsl:stylesheet>
.)
Вот пример:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my" exclude-result-prefixes="my"
>
<xsl:output method="text"/>
<my:nodes>
<string>Hello </string>
<string>World</string>
</my:nodes>
<xsl:variable name="vLookup"
select="document('')/*/my:nodes/*"/>
<xsl:param name="pSearchWord" select="'World'"/>
<xsl:template match="/">
<xsl:if test="$pSearchWord = $vLookup">
<xsl:value-of select=
"concat('Found the word ', $pSearchWord)"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к любому документу XML (не используется), результат будет :
Found the word World
Обратите внимание , что нам вообще не нужна функция расширения xxx:node-set()
.
II. Решение XSLT 2.0 / XPath 2.0
В XSLT 2.0 / XPath 2.0 всегда можно использовать тип sequence . Например, можно просто определить переменную, которая будет содержать последовательность строк, следующим образом:
<xsl:variable name="vLookup" as="xs:string*"
select="'Hello', 'World'"/>
и используйте его как в следующем преобразовании:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xsl:output method="text"/>
<xsl:variable name="vLookup" as="xs:string*"
select="'Hello', 'World'"/>
<xsl:param name="pSearchWord" select="'World'"/>
<xsl:template match="/">
<xsl:if test="$pSearchWord = $vLookup">
<xsl:value-of select=
"concat('Found the word ', $pSearchWord)"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>