2015-05-28 3 views
3

Предположим, что у меня есть следующая переменнаядоступа подходящий шаблон в пределах XSL токенизировать

<xsl:variable name="randomString" select="'COLUMN1 == 400 or COLUMN1 == 5 and COLUMN2 != 3'" /> 

Есть ли удобный способ доступа к подходящий шаблон в токенизировать() функцию, например, с помощью этого

<xsl:for-each select="tokenize($randomString, 'and|or')"> 
    <xsl:value-of select="concat('not(', current(), ')')" /> 
    <!-- How do I access the matched pattern? --> 
</xsl:for-each> 

Или я использовать пользовательский шаблон, как тот, который я нашел здесь http://docbook.sourceforge.net/release/xsl/1.77.0/doc/lib/str.tokenize.keep.delimiters.html

+1

Когда вы говорите «согласованный шаблон», вы говорите о шаблоне разделителя 'и | или', верно? Вы хотите знать, было ли это «и» или «или» в данном случае? – LarsH

+0

Возможный дубликат: http://stackoverflow.com/questions/10325082/xslt-tokenize-capturing-the-separators – LarsH

+0

Точно @LarsH - Я хочу продолжать, в зависимости от того, соответствуют ли 'и' или 'или'. –

ответ

1

Нет, нет никакого способа, чтобы получить согласованный разделитель. «Сепараторы сами не возвращаются». (http://www.w3.org/TR/xpath-functions/#func-tokenize)

Обходной может быть, tokenizing с or в качестве сепаратора во внешней петле, то tokenizing с and в качестве сепаратора во внутреннем цикле. Тогда вы всегда будете знать, с какими разделителями вы столкнулись, исходя из того, где вы находитесь.

Другим подходом было бы использовать analyze-string(). См. this answer.

Смежные вопросы