2013-08-29 44 views
1

我需要测试一个xsl变量是否包含xslt中的一个单词或多个逗号分隔的单词。如何检查字符串变量是否在XSL中用逗号分隔?

自变量是动态的,它映射到URL查询字符串它可以是某事像这样的参数:

index.aspx?role=manager 

index.aspx?role=manager,director 

在XSLT,我需要的,如果找出$角色参数只是一个单词或多个逗号分隔的单词。如果多的话,那么我需要提取每一个字,并以此为基础进行的那些话XSLT过滤像

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

因此只有那些经理或主管的角色匹配的行返回。

这可能吗?

更新: 我有这样一个过滤器:

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

如果角色只有一个价值像index.aspx?role=manager则上述工作正常。 但如果角色是多重的话就像这些, index.aspx?role=manager,director 然后我需要一些提取物,字符串“经理,CEO”,并能够做到以下几点:

<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

你可以设置一个变量在$角色的第一个角色如下:

​​

然后设置一个变量role2所的第二个角色(如果有的话),使用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:为此,您可能希望使用'tokenize()'的XSLT 1.0实现。这可以在XSLT处理器中作为扩展使用,或者通过http://www.exslt.org/str/functions/tokenize/提供XSLT 1.0实现。 – LarsH

相关问题