2013-08-29 3 views
1

Мне нужно проверить, содержит ли переменная xsl только одно слово или несколько разделенных запятыми слов в xslt.Как проверить, ограничена ли строковая переменная в XSL?

поскольку переменная является динамическим, его параметр, который отображает к URL строки запроса, который может быть либо STH так:

index.aspx?role=manager 

или

index.aspx?role=manager,director 

в XSLT, мне нужно, чтобы выяснить, параметр $ role - это просто одно слово или несколько разделенных запятыми слов. Если несколько слов, то мне нужно, чтобы извлечь каждое слово и сделать XSLT фильтрации на основе этих слов, как

/rows/row[role=extractedWord[1] or role = extractedWord[2] 

так, что только те строки, соответствующие для менеджера или директора ролей возвращаются.

Возможно ли это?

UPDATE: У меня есть фильтр, как это:

<xsl:variable name="AllPerRole"select="/dsQueryResponse/Rows/Row[contains(@EmployeeRoles,$Role)]" />

Если роль имеет только одно значение, как index.aspx?role=manager то выше работает отлично. Но если роль несколько слов, как эти, index.aspx?role=manager,director тогда мне нужно некоторый экстракт, что строка «менеджера, генеральный директор» и быть в состоянии сделать следующее:

<xsl:variable name="AllPerRole"select="/dsQueryResponse/Rows/Row[contains(@EmployeeRoles,$Role{firstRole}) or contains(@EmployeeRoles,$Role{2ndRole})]" />

+1

Какую версию XSLT? XSLT 2 имеет регулярные выражения, XSLT 1 - нет. – FrankPl

+0

Для XSL 1.0, пожалуйста, – Athapali

ответ

1

Вы можете настроить переменные для первой роли в $ роли следующим образом:

<xsl:variable name="Role1"> 
    <xsl:choose> 
    <xsl:when test="contains($Role, ',')"> 
     <xsl:value-of select="substring-before($Role, ',')"/> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="$Role" /> 
    </xsl:otherwise> 
    <xsl:choose> 
</xsl:variable> 

а затем создать переменную роль2 для второй роли (если таковые имеются), используя substring-after() вместо substring-before().

Тогда:

<xsl:variable name="AllPerRole" 
    select="/dsQueryResponse/Rows/Row[ 
    contains(@EmployeeRoles,$Role1) or contains(@EmployeeRoles,$Role2)]" /> 
+0

Спасибо, хотя только проблема состоит в том, что в параметре $ Role может быть не более 5 или даже больше разделенных запятыми слов. Можем ли мы для каждого каждого слова в $ Role и сохранять каждый из них в виде $ Role [0], $ Role [1] и т. Д.? – Athapali

+0

@SarikaThapaliya: для этого вам может понадобиться реализация XSLT 1.0 'tokenize()'. Это может быть доступно как расширение вашего XSLT-процессора или реализация XSLT 1.0 доступна через http://www.exslt.org/str/functions/tokenize/. – LarsH

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