我需要测试xsl变量是否只包含xslt中的一个单词或多个逗号分隔的单词。
因为变量是动态的,所以它是一个映射到url querystring的参数,它可以是这样的:
index.aspx?role=manager
或
index.aspx?role=manager,director
在XSLT中,我需要找出$ role参数是否只是一个单词或多个逗号分隔的单词。如果有多个单词,那么我需要提取每个单词并根据
这些单词进行xslt过滤/rows/row[role=extractedWord[1] or role = extractedWord[2]
这样只返回那些匹配manager或director角色的行。
这可能吗?
更新: 我有一个像这样的过滤器:
<xsl:variable name="AllPerRole"
select="/dsQueryResponse/Rows/Row[contains(@EmployeeRoles,$Role)]" />
如果角色只有一个像index.aspx?role=manager
这样的值,那么上面的工作正常。
但如果角色是这样的多个单词,
index.aspx?role=manager,director
然后我需要提取一些字符串'manager,CEO',并能够做到以下几点:
<xsl:variable name="AllPerRole"
select="/dsQueryResponse/Rows/Row[contains(@EmployeeRoles,$Role{firstRole}) or contains(@EmployeeRoles,$Role{2ndRole})]" />
答案 0 :(得分:1)
您可以为$ Role中的第一个角色设置变量,如下所示:
<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>
然后使用substring-after()
代替substring-before()
为第二个角色(如果有)设置变量Role2。
然后:
<xsl:variable name="AllPerRole"
select="/dsQueryResponse/Rows/Row[
contains(@EmployeeRoles,$Role1) or contains(@EmployeeRoles,$Role2)]" />