Цикличное выполнение по отличным значениям

Учитывая переменную, которая возвращает список отличных состояний с помощью отличных значений () функция, там способ маркировать переменную в цикле foreach?

<States>
<State>AL</State>
<State>AL</State>
<State>NM</State>
</States>

Следующая переменная возвращает AL и NM, но я не могу выполнить итерации по нему использующий для - каждый. Существует ли путь вокруг этого?

<xsl:variable name="FormStates" select="distinct-values(States/State)"/>
  <xsl:for-each select="$FormStates">

XSLT 2.0 хорошо.

6
задан johkar 14 July 2010 в 13:44
поделиться

2 ответа

Функция distinct-values() возвращает последовательность значений, которые вы должны иметь возможность переработать. Результат, так сказать, «токенизирован».

fn:distinct-values('AL', 'AL', 'NL') возвращает последовательность ('AL', 'NL').

Если вы выводить переменную с помощью xsl:value-of, она вернет строку "AL NL" только потому, что разделителем последовательностей по умолчанию для xsl:value-of является символ одного пробела. Это то, что вы можете изменить с помощью атрибута @separator:

Input

<?xml version="1.0" encoding="UTF-8"?>
<States>
  <State>AL</State>
  <State>AL</State>
  <State>NM</State>
</States>

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:template match="/">
    <xsl:variable name="FormStates" select="distinct-values(States/State)"/>
    <xsl:comment>xsl:value-of</xsl:comment>
    <xsl:value-of select="$FormStates" separator=":"/>
    <xsl:comment>xsl:for-each</xsl:comment>
    <xsl:for-each select="$FormStates">
      <xsl:value-of select="."/>
      <xsl:text>:</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Output

<?xml version="1.0" encoding="UTF-8"?>
<!--xsl:value-of-->
AL:NM
<!--xsl:for-each-->
AL:NM:
5
ответ дан 17 December 2019 в 00:02
поделиться

По идее должно работать; Вы уверены, что XPath, заданный для функции own-values ​​, верен? Код, который вы указали, требует, чтобы элемент States был родственником элемента forms .

Вы можете вставить сразу после объявления переменной, чтобы убедиться, что она установлена ​​правильно.

0
ответ дан 17 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

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