У меня есть следующий сценарий. У меня есть список стран (EG, KSA, ОАЭ, AG)
Я должен проверить вход XML, если он содержится в этом списке или нет:
<xsl:variable name="$country" select="Request/country" >
<!-- now I need to declare the list of countries here -->
<xsl:choose>
<!-- need to check if this list contains the country -->
<xsl:when test="$country='??????'">
<xsl:text>IN</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>OUT</xsl:text>
</xsl:otherwise>
</xsl:choose>
Примечание: Я использую XSLT 1.0.
Попробуйте что-то вроде, если ваш список стран принадлежит к вашему XML-входу:
<xsl:when test="/yourlist[country = $country]'">
или, если это статично, вы можете пойти с:
<xsl:when test="$country = 'EG' or $country = 'KSA' or ...">
EDIT
После повторного прочтения вашего сообщения, я думаю, что оригинальная версия моего ответа (см. ниже) - это не он.
Вы уже имеете список - ваша переменная объявление выбирает набор узлов из всех
узлов, которые являются дочерними по отношению к
(набор узлов - это XSLT-эквивалент массива/стального списка):
<xsl:variable name="$country" select="Request/country" >
Но суть в том, что вам даже не нужно нужен этот список как отдельная переменная; все что вам нужно это:
<xsl:when test="Request[country=$country]"><!-- … --></xsl:when>
Где Request[country=$country]
читается как "Внутри
, посмотрите на каждую
и выберите ее, если она равна $country
. " Когда выражение возвращает непустой узел, $country
находится в списке.
Это, фактически, то, что Рубенс Фариас сказал с самого начала. :)
Оригинальный ответ, сохраненный для записи.
Если под "списком" вы имеете в виду разделенную запятыми строку токенов:
<!-- instead of a variable, this could be a param or dynamically calculated -->
<xsl:variable name="countries" select="'EG, KSA, UAE, AG'" />
<xsl:variable name="country" select="'KSA'" />
<xsl:choose>
<!-- concat the separator to start and end to ensure unambiguous matching -->
<xsl:when test="
contains(
concat(', ', normalize-space($countries), ', ')
concat(', ', $country, ', ')
)
">
<xsl:text>IN</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>OUT</xsl:text>
</xsl:otherwise>
</xsl:choose>