Создать список / массив в XSLT - PullRequest
7 голосов
/ 28 января 2010

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

Ответы [ 3 ]

4 голосов
/ 29 января 2010

EDIT

После прочтения вашего поста, я думаю, что оригинальная версия моего ответа (ниже) не так.

У вас уже есть список - ваше объявление переменной выбирает набор узлов из всех <country> узлов, которые являются потомками <Request> (набор узлов является эквивалентом XSLT массива список):

<xsl:variable name="$country" select="Request/country" >

Но дело в том, что вам даже не нужен этот список как отдельная переменная; все что вам нужно это:

<xsl:when test="Request[country=$country]"><!-- … --></xsl:when>

Где Request[country=$country] читается как «Внутри <Request>, посмотрите на каждый <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>

3 голосов
/ 24 февраля 2012
<xsl:variable name="$country" select="Request/country"/>
<xsl:variable name="countries">|EG|KSA|UAE|AG|</xsl:variable>

<xsl:when test="contains($countries,$country)">...</xsl:when>
2 голосов
/ 28 января 2010

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

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

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

<xsl:when test="$country = 'EG' or $country = 'KSA' or ...">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...