1

我需要测试一个 xsl 变量在 xslt 中是否只包含一个单词或多个逗号分隔的单词。

由于变量是动态的,它是一个映射到 url 查询字符串的参数,它可以是这样的:

index.aspx?role=manager

或者

index.aspx?role=manager,director

在 XSLT 中,我需要确定 $role 参数是一个单词还是多个逗号分隔的单词。如果有多个单词,那么我需要提取每个单词并根据这些单词进行 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})]" />

4

1 回答 1

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>

然后为第二个角色(如果有)设置一个变量 Role2,使用substring-after()而不是substring-before().

然后:

<xsl:variable name="AllPerRole"
    select="/dsQueryResponse/Rows/Row[
     contains(@EmployeeRoles,$Role1) or contains(@EmployeeRoles,$Role2)]" />
于 2013-08-29T19:28:56.383 回答