XSL - пересечь две коллекции и вернуть найденное общее значение - PullRequest
0 голосов
/ 22 мая 2018

Мне нужно написать XSL-преобразование, чтобы можно было определить, входит ли один из параметров узла configuration/selectedOptions в число вариантов из узла availableOptions, и вернуть это значение.

Для приведенной ниже структуры XML я должен вернуть A, потому что она в обеих коллекциях.Всегда будет возвращено только одно значение.

Упрощенная структура XML выглядит следующим образом:

<availableOptions>
    <option>A</option>
    <option>B</option>
    <option>C</option>
    <option>D</option>
</availableOptions>

<configuration>
    <selectedOptions>A,M,P,T,S</selectedOptions>
</configuration>

Что касается XSL, то все, что я написал до сих пор, это:

<xsl:variable name="hasSelectedOption">
  <xsl:for-each select="tokenize(//configurations/selectedOptions, ',')">
    <xsl:if test=".= 'A'">
      <xsl:value-of select="." />
    </xsl:if>            
  </xsl:for-each>
</xsl:variable>

Пока все работает нормально, проходит по configuration/selectedOptions и возвращает A, если находит его в коллекции, но я не знаю, как заменить этот жестко закодированный A всеми значениямиот availableOptions/option.

1 Ответ

0 голосов
/ 22 мая 2018

Если вы определяете переменную для хранения параметров токена, как это ...

 <xsl:variable name="selectedOptions" select="tokenize(//configuration/selectedOptions, ',')" />

Затем вы можете получить доступную опцию, например так ...

<xsl:variable name="hasSelectedOption" select="//availableOptions/option[. = $selectedOptions]" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...