如何在XSL中检查字符串变量是否以逗号分隔?

时间:2013-08-29 19:06:31

标签: html xml regex xslt-1.0

我需要测试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})]" />

1 个答案:

答案 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)]" />