Создайте список/массив в XSLT

У меня есть следующий сценарий. У меня есть список стран (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.

7
задан halfer 28 February 2018 в 11:22
поделиться

2 ответа

Попробуйте что-то вроде, если ваш список стран принадлежит к вашему XML-входу:

<xsl:when test="/yourlist[country = $country]'">

или, если это статично, вы можете пойти с:

<xsl:when test="$country = 'EG' or $country = 'KSA' or ...">
2
ответ дан 7 December 2019 в 01:21
поделиться

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>

4
ответ дан 7 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: