Учитывая переменную, которая возвращает список отличных состояний с помощью отличных значений () функция, там способ маркировать переменную в цикле 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 хорошо.
Функция 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:
По идее должно работать; Вы уверены, что XPath, заданный для функции own-values
, верен? Код, который вы указали, требует, чтобы элемент States
был родственником элемента forms
.
Вы можете вставить
сразу после объявления переменной, чтобы убедиться, что она установлена правильно.